我正在将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,它就不会随角色一起移动。我做错了什么/该如何解决?

另外,我不应该使用两个单独的精灵,而是使用单独的精灵,以使角色精灵没有球,带有球的角色精灵和球本身,然后在接触时仅更改节点的纹理?

最佳答案

因为movingBallbodyA.node的子代,所以它的位置必须在bodyA.node的坐标空间中。因此,如果您给它的坐标为(0,0),它将位于中间:

更换:

movingBall.position = contact.bodyA.node!.position




movingBall.position = CGPointZero


看看看起来如何。球应直接位于bodyA.node的顶部。

10-08 05:22