我正在将SpriteKit用于具有球和角色的游戏。角色正在与SKAction对齐,用户可以通过触摸来移动球。当球和角色接触时,我希望将球固定在角色上。
func didBeginContact(contact: SKPhysicsContact) {
if contact.bodyA.categoryBitMask == charMask && contact.bodyB.categoryBitMask == ballMask{
println("contact")
if contactMade {
let movingBall = contact.bodyB.node!.copy() as! SKSpriteNode
//this line of code doesn't affect anything no matter what coordinates i set it to
movingBall.position = contact.bodyA.node!.position
contact.bodyB.node!.removeFromParent()
contact.bodyA.node!.removeAllActions()
contact.bodyA.node!.addChild(movingBall)
}
}
}
当前的问题是,当我执行contact.bodyA.node!.addChild(ball)(字符节点)时,球被附着在角色的最左侧而不是角色上,并且似乎没有设置Movingball.position影响它。我也尝试过在场景中添加addChild,尽管它将球添加到正确的位置,但是如果没有另一个SKAction,它就不会随角色一起移动。我做错了什么/该如何解决?
另外,我不应该使用两个单独的精灵,而是使用单独的精灵,以使角色精灵没有球,带有球的角色精灵和球本身,然后在接触时仅更改节点的纹理?
最佳答案
因为movingBall
是bodyA.node
的子代,所以它的位置必须在bodyA.node
的坐标空间中。因此,如果您给它的坐标为(0,0),它将位于中间:
更换:
movingBall.position = contact.bodyA.node!.position
与
movingBall.position = CGPointZero
看看看起来如何。球应直接位于bodyA.node的顶部。