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

标签 ios physics sprite-kit

所以我在 Sprite Kit 中制作了一个木偶,并将他放置在场景中。我创建了一个 Marionette 类,它是 SKNode 的子类,当我创建该类的实例时,我将多个 SKSpriteNode 相互添加。这应该会让您了解它是如何工作的(我已经剪掉了不必要的行):

[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,然后 addChild他到了现场。

事实上,我的 SKScene 子类现在有一堆代码来添加所有引脚,但感觉它不适合场景。想法?

最佳答案

您不想使用anchorPoint作为 anchor 。 anchorPoint 属性是一个范围从 0 到 1 的因子,影响纹理与 Sprite 位置的偏移方式,即默认的 0.5/0.5 使 Sprite 纹理位于 Sprite 位置的中心。换句话说,anchorPoint 不是一个位置,使用它会将 body 和头部关节锚定到屏幕的左下角。

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

关于ios - 将 SKPhysicsJoint 添加到对象的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19639778/

相关文章:

javascript - box2d 力(applyimpulse 和 applyforce)

Xcode Swift 将函数传递给 GameOver 场景

objective-c - SKScene的更新方法得到一个 "currentTime",与CFAbsoluteTimeGetCurrent()不同

iphone - HTML 解析因重音字母而失败(例如 : é)

ios - 在 WKWebView 中禁用整个 UIMenuController 编辑菜单

ios - swift promise 套件 : Equivalent to when() which executes sequentially?

c++ - 数组馈送函数消耗的内存

ios - 我可以在 UITextField 中放置不可编辑的文本吗

javascript - Physijs,结合运动和物理

ios - 将子 SKNode 添加到现有 SKNode 会更改触摸区域