SpriteKit-在关节之间绘制动态线



我正在尝试使用iOS spritekit使用内置物理学来编程构建摆。

目前,我的摆枢轴,重量和有限的关节可以使重量摆动...但是,我不知道如何在枢轴和重量之间编码一条线(杆)。p>我认为用skshapenode绘制一条线将是一个开始...?

-(void)setupPendulum
{
    pivot = [SKSpriteNode spriteNodeWithImageNamed:@"pivot.png"];
    pivot.position = CGPointMake(self.size.width / 2, self.size.height / 2);
    pivot.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:1.0];
    pivot.physicsBody.dynamic = NO;
    pivot.physicsBody.affectedByGravity = NO;
    pivot.xScale = 0.25;
    pivot.yScale = 0.25;
    [self addChild:pivot];
    weight = [SKSpriteNode spriteNodeWithImageNamed:@"weight.png"];
    weight.position = CGPointMake(150, 512);
    weight.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:100.0];
    weight.physicsBody.dynamic = YES;
    weight.physicsBody.affectedByGravity = YES;
    weight.physicsBody.mass = 0.5;
    weight.xScale = 0.75;
    weight.yScale = 0.75;
    [self addChild:weight];
    SKPhysicsBody *ab = pivot.physicsBody;
    SKPhysicsBody *bb = weight.physicsBody;
    CGPoint ap = pivot.position;
    CGPoint bp = weight.position;
    SKPhysicsJointLimit *joints = [SKPhysicsJointLimit jointWithBodyA:ab
                                                                bodyB:bb
                                                              anchorA:ap
                                                              anchorB:bp];
    [self.physicsWorld addJoint:joints];
}

我的项目需要SKPhysicsJointLimit而不是引脚,因此经过大量反复试验,我找到了以下解决方案。该行被删除并在didSimulatePhysics中绘制。该线路连接"卫星",因为它在"母舰"周围旋转时。我对所有这些都是新手的,所以我感谢对这种方法的任何反馈。

设置变量首先:

SKShapeNode *_lineNode;

现在绘制了didSimulatePhyspysics的线:

- (void)didSimulatePhysics {
    if (_lineNode){
        [_lineNode removeFromParent];
    }
    SKNode *satelliteShip = [self childNodeWithName:kSatelliteShipName];
    CGMutablePathRef pathToDraw;
    pathToDraw = CGPathCreateMutable();
    CGPathMoveToPoint(pathToDraw, NULL, motherShip.position.x, motherShip.position.y);
    CGPathAddLineToPoint(pathToDraw, NULL, satelliteShip.position.x, satelliteShip.position.y);
    CGPathCloseSubpath(pathToDraw);
    _lineNode = [SKShapeNode node];
    _lineNode.path = pathToDraw;
    CGPathRelease(pathToDraw);
    _lineNode.strokeColor = [SKColor grayColor];
    [self addChild:_lineNode];
}

正确的方向是查看 skphysicsjointpin ,它可以使用skshapenode或skspritenode(etc。)。

https://developer.apple.com/library/ios/documentation/spritekit/reference/skphysicsjointpin_ref/reference/reference/reference.html

请注意我的问题及其上的评论:

,由于Apple(小册子大小)参考的SpriteKit上没有太多的文档(现在),并且在线上掌握了单级应用程序/教程的掌握 - 大多数人的回答是,"只需在Google中查找 cocos2d",然后重新做到这一点。一切都很好,但我不是一个人的复制品。我喜欢学习可持续和可重复使用的最佳方法。这就是为什么我问做什么最好的方法,而不是张贴的cocos2d移植拷贝性代码,然后让某人像我看到的经常发生的那样填充空白。

最新更新