将SKPhysicsJoint添加到对象的最佳方法

时间:2013-10-28 16:11:58

标签: ios physics sprite-kit

所以我有一个我在Sprite Kit中制作的牵线木偶,并把他放在一个场景中。我创建了一个Marionette类,它是SKNode的子类,当我创建这个类的实例时,我相互添加了许多SKSpriteNodes。这应该让你知道它是如何工作的(我已经剪掉了不必要的行):

[self addChild:self.head];
[self.head addChild:self.chest];
[self.chest addChild:self.leftLeg];
[self.chest addChild:self.rightLeg];
[self.leftLeg addChild:self.leftFoot];
[self.rightLeg addChild:self.rightFoot];

所以,这样做之后,我的牵线木偶出现了。我想为每个连接添加一个SKPhysicsJointPin。代码如下所示:

self.chestPin = [SKPhysicsJointPin jointWithBodyA:self.marionette.head.physicsBody bodyB:self.marionette.chest.physicsBody anchor:self.marionette.chest.anchorPoint];

起初我以为我可以设置Marionette类中的所有引脚,但这不起作用(如果我记得,我会得到EXC_BAD_ACCESS)。事实证明,在添加关节之前,我必须将Marionette添加到整个SKScene中。

我觉得这很有道理,但我不禁想到应该有一些方法可以在Marionette课程中设置一切,然后在场景中粘贴2行代码来创建一个新的Marionette,然后添加孩子他到了现场。

实际上,我的SKScene子类现在有一堆代码来添加所有引脚,并且它不适合在场景中。想法?

1 个答案:

答案 0 :(得分:3)

您不希望将anchorPoint用作锚点。 anchorPoint属性是一个从0到1的因子,它影响纹理从精灵的位置偏移的方式,即默认的0.5 / 0.5将精灵的纹理置于精灵位置的中心。换句话说,anchorPoint不是一个位置,使用它会锚定身体和身体。头部连接到屏幕的左下角。

相反,尝试使用胸部或头部的位置作为锚点,或两者之间的点。