swift - SKSprite.addChild 位于位置

标签 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 添加图像时,它位于魔杖的中心,我想控制它的添加位置。

附加信息。我正在使用物理主体来为魔杖和元素设置动画。魔杖由用户触摸屏幕来控制。我尝试了几种方法来连接两个对象 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/

相关文章:

swift - SKSpritenode 与场景的物理主体交互

swift - 如何解决这个 NSTimer 问题?

ios - SKPhysicsBody 看起来很小

swift - 调用私有(private) var 来方便 init (swift)

swift - 如何在 Swift viewDidLoad 中获取邮政编码?

iOS 应用程序即使在安装后也会崩溃,但新用户不会

ios - Firestore 不返回查询 Swift 5 Xcode 11.3

swift - 在 Swift Xcode 项目中使用 LLVM C API

ios - 将相同类型的 SKAction 添加到 sprite 会覆盖之前的 Action 吗?

objective-c - applyForce(0, 400) - SpriteKit 不一致