我有兩個spriteNodes英雄和敵人,都用矩形physicsBody應用。 在更新中,當英雄到達某個點時,例如hero.position.y < = 300我希望敵人旋轉並向下移動時面對英雄。雪碧套件 - 面對英雄? (旋轉到另一個節點的方向)
我發現的唯一示例代碼是Adventure from Apple,它有一個faceTo類,但我發現使用它非常複雜。我正在尋找一個很好和乾淨的解決方案。
在此先感謝。
我有兩個spriteNodes英雄和敵人,都用矩形physicsBody應用。 在更新中,當英雄到達某個點時,例如hero.position.y < = 300我希望敵人旋轉並向下移動時面對英雄。雪碧套件 - 面對英雄? (旋轉到另一個節點的方向)
我發現的唯一示例代碼是Adventure from Apple,它有一個faceTo類,但我發現使用它非常複雜。我正在尋找一個很好和乾淨的解決方案。
在此先感謝。
最基本的實現應該是這個樣子:
- (void)rotateNode:(SKNode *)nodeA toFaceNode:(SKNode *)nodeB {
CGFloat angle = atan2f(nodeB.position.y - nodeA.position.y, nodeB.position.x - nodeA.position.x);
if (nodeA.zRotation < 0) {
nodeA.zRotation = nodeA.zRotation + M_PI * 2;
}
[nodeA runAction:[SKAction rotateToAngle:angle duration:0]];
}
您瞭解正在發生的事情是很重要的。查閱並閱讀atan2(http://en.wikipedia.org/wiki/Atan2)並嘗試瞭解上述代碼的工作原理。
這不會使精靈顛倒嗎? – ZeMoon
這是假設你的遊戲是從上到下的角度。我假設自從你引用了Apple的Adventure演示版本。 – henryeverett
哦,好的。那麼這將是合適的。 – ZeMoon
您可以使用SKNode的xScale屬性使精靈以另一種方式面對。這可以通過設置來完成:
sprite.xScale = -1.0;
然而,這已被證明會導致問題與physicsBody
,從這個問題可以看出:
Flipped x-scale breaks collision handling (SpriteKit 7.1)
這個問題的方法是在那裏由JKallio給出。
他建議保持你的精靈作爲另一個SKNode(應用physicsBody)的子元素,並在需要的地方更改子節點的xScale屬性。這也是我在自己的項目中使用的。
您可以使用SKSpriteNode的xScale屬性。將xScale設置爲-1.0將使精靈以另一種方式面對。 – ZeMoon
但是,這可能會導致sprite的physicsBody出現問題。 – ZeMoon