2014-05-08 32 views
2

我有兩個spriteNodes英雄和敵人,都用矩形physicsBody應用。 在更新中,當英雄到達某個點時,例如hero.position.y < = 300我希望敵人旋轉並向下移動時面對英雄。雪碧套件 - 面對英雄? (旋轉到另一個節點的方向)

我發現的唯一示例代碼是Adventure from Apple,它有一個faceTo類,但我發現使用它非常複雜。我正在尋找一個很好和乾淨的解決方案。

在此先感謝。

+0

您可以使用SKSpriteNode的xScale屬性。將xScale設置爲-1.0將使精靈以另一種方式面對。 – ZeMoon

+0

但是,這可能會導致sprite的physicsBody出現問題。 – ZeMoon

回答

2

最基本的實現應該是這個樣子:

- (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)並嘗試瞭解上述代碼的工作原理。

+0

這不會使精靈顛倒嗎? – ZeMoon

+0

這是假設你的遊戲是從上到下的角度。我假設自從你引用了Apple的Adventure演示版本。 – henryeverett

+0

哦,好的。那麼這將是合適的。 – ZeMoon

0

您可以使用SKNode的xScale屬性使精靈以另一種方式面對。這可以通過設置來完成:

sprite.xScale = -1.0; 

然而,這已被證明會導致問題與physicsBody,從這個問題可以看出:

Flipped x-scale breaks collision handling (SpriteKit 7.1)

這個問題的方法是在那裏由JKallio給出。

他建議保持你的精靈作爲另一個SKNode(應用physicsBody)的子元素,並在需要的地方更改子節點的xScale屬性。這也是我在自己的項目中使用的。