在 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 添加图像时,它位于魔杖的中心,我想控制它的添加位置。
附加信息。我正在使用物理主体来为魔杖和元素设置动画。魔杖由用户触摸屏幕来控制。我尝试了几种方法来连接两个对象 SKPhysicsJointFixed.jointWithBodyA 和 SKPhysicsJointSliding.jointWithBodyA 但无法让它按照我想要的方式工作。我认为加入两个物理体对于我正在做的事情来说有点矫枉过正,但我可能是错的。我真正的目标是:
1) 将一个 Sprite (魔杖)添加(或加入)到另一个 Sprite (元素) 2) 允许魔杖继续由用户触摸控制(动画) 3) 控制项目相对于魔杖上某个点的相对位置。
这是第三个困难的项目。感谢任何帮助,如果您需要查看更多代码,请告诉我。
最佳答案
您的第一个问题:
SKSpriteNode
的默认位置是 (0,0),因此如果将其添加到父节点,SKSpriteNode
将位于父节点坐标系的中间。如果您想将图像添加到魔杖上稍高一点的位置(假设向上 100 点),您只需输入 imageToAdd.position = CGPointMake(0,100)
即可。子节点将保持附加在该位置。当然,另一种选择是创建一个关节,如果您希望魔杖和附件具有物理属性,那么这根本就不算过分。
您的第二个问题:
只要您不将物理体从魔杖上移除,它仍然会在那里并且可以由用户控制。
您的第三个问题:
自从您将其创建为子节点以来,附加项目将具有相对于魔杖的特定位置。如果您需要移动该项目,您将创建一个SKAction
。例如,如果您需要将项目沿着魔杖移动,您可以说:
moveDownWand = SKAction.moveByX(0.0, y: pointsToMoveDownBy, duration: someDuration)
attachedItem.runAction(moveDownWand)
希望这对您有所帮助,如果您有疑问,请告诉我。
关于swift - SKSprite.addChild 位于位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115524/