位于

时间:2015-08-20 10:14:17

标签: swift sprite-kit skphysicsbody

在Swift中,我有一些像这样的代码:

let wand = SKSpriteNode(imageNamed: "Wand")
let item = SKSpriteNode(imageNamed: "Item")
...

func didBeginContact(contact: SKPhysicsContact) {
   contact.bodyB.node!.removeAllActions()
   var imageToAdd = contact.bodyB.node?.name
   wand.addChild(SKSpriteNode(imageNamed: imageToAdd!))
}

我想要的是当某种类型的物品接触魔杖时,我想把它附在魔杖上。位图掩码已设置,所有这些都可以完美地工作。但是,当addChild添加图像时,它就在魔杖的中心,我想控制它的添加位置。

其他信息。我使用physicsBody为魔杖和物品制作动画。用户触摸屏幕控制棒。我尝试了几种方法来连接两个对象,SKPhysicsJointFixed.jointWithBodyA和SKPhysicsJointSliding.jointWithBodyA但是无法按照我想要的方式工作。我认为加入这两个物理机构对我所做的事情来说太过分了,但我可能错了。我的真正目标是:

1)将一个精灵(魔杖)添加(或加入)到另一个精灵(一个项目) 2)允许通过用户触摸继续控制(动画)棒 3)控制物品相对于魔杖上某点的相对位置。

这是艰难的第三个项目。任何帮助表示赞赏,如果您需要查看更多代码,请告诉我们。

2 个答案:

答案 0 :(得分:0)

你的第一个问题:
SKSpriteNode的默认位置是(0,0),因此如果将其添加到父节点,SKSpriteNode将位于父节点坐标系的中间。如果你想在魔杖上添加更高的图像,可以说100点,你只需说imageToAdd.position = CGPointMake(0,100)。子节点将保持连接在该位置。另一种选择当然是创建一个关节,如果你想让魔杖和附件具有物理特性,那就完全不会过分杀人。

你的第二个问题:
只要你不从魔杖上移除物理体,它就会存在并且可以被用户控制。

你的第三个问题:
自从您将其创建为子节点以来,附加项目将具有相对于魔杖的特定位置。如果您需要移动项目,则需要创建SKAction。例如,如果您需要将项目向下移动魔杖,您可以说:

moveDownWand = SKAction.moveByX(0.0, y: pointsToMoveDownBy, duration: someDuration)
attachedItem.runAction(moveDownWand)

希望这有帮助,如果您有疑问,请与我联系。

答案 1 :(得分:0)

谢谢@ M321K,你让我走上正轨!这是我做的:

var nodeToAdd = SKSpriteNode(imageNamed: imageToAdd!)
nodeToAdd.position = CGPointMake(0, -40)
wand.addChild(nodeToAdd)

我必须创建精灵并在将其添加到魔杖之前设置它的位置。非常感谢,非常感谢。