如何将新精灵附加到移动精灵?
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】:因为movingBall
是bodyA.node
的子元素,所以它的位置需要在bodyA.node
的坐标空间中。所以如果你给它坐标 (0,0) 它会在中间:
替换:
movingBall.position = contact.bodyA.node!.position
与
movingBall.position = CGPointZero
然后看看它的样子。球应该直接放在 bodyA.node 的顶部。
【讨论】:
以上是关于如何将新精灵附加到移动精灵?的主要内容,如果未能解决你的问题,请参考以下文章