如何将新精灵附加到移动精灵?

Posted

技术标签:

【中文标题】如何将新精灵附加到移动精灵?【英文标题】:How to attach a new sprite to a moving sprite? 【发布时间】:2015-07-24 17:22:31 【问题描述】:

我正在将 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)(角色节点)时,球会附着在角色的最左侧而不是角色上,并且似乎在设置移动球。位置不影响它。我也尝试过在场景中执行 addChild,虽然它会将球添加到正确的位置,但如果没有另一个 SKAction,它不会随角色移动。我做错了什么/我能做些什么来解决它?

另外,我是否应该使用单独的精灵,而不是使用这样的 2 个精灵,以便有一个没有球的角色精灵、有球的角色精灵和球本身,然后在它们接触时更改节点的纹理?

【问题讨论】:

确保您使用 SKAction 来改变球的位置。 【参考方案1】:

因为movingBallbodyA.node 的子元素,所以它的位置需要在bodyA.node 的坐标空间中。所以如果你给它坐标 (0,0) 它会在中间:

替换:

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

movingBall.position = CGPointZero

然后看看它的样子。球应该直接放在 bodyA.node 的顶部。

【讨论】:

以上是关于如何将新精灵附加到移动精灵?的主要内容,如果未能解决你的问题,请参考以下文章

如何旋转精灵和移动

使用 SpriteKit 如何以随机但一致的速度将精灵节点移动到一个点

Swift 3 - 当布尔为真时如何移动精灵节点?

如何在触摸屏幕时移动精灵并在我点击屏幕时禁用

按键精灵 怎么让鼠标移动到固定位置

玩家精灵在按住移动键时移动而无需输入