我有两个spriteNodes英雄和敌人,两者都应用了矩形physicsBody。 在更新中,当英雄到达某个点时,例如hero.position.y< = 300我希望敌人旋转并在英雄向下移动时面对英雄。
我找到的唯一示例代码是Adventure from Apple,它有一个faceTo类,但我发现它使用起来非常复杂。我正在寻找一个漂亮而干净的解决方案。
提前致谢。
答案 0 :(得分: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)并尝试了解上述代码的工作原理。
答案 1 :(得分:0)
您可以使用SKNode的xScale属性使sprite面向另一个方向。这可以通过设置:
来完成sprite.xScale = -1.0;
然而,事实证明这会导致physicsBody
出现问题,从这个问题可以看出:
Flipped x-scale breaks collision handling (SpriteKit 7.1)
此问题的解决方案由JKallio提供。
他建议将您的精灵保持为另一个SKNode(您应用physicsBody)的子项,并在需要时更改子节点的xScale属性。这也是我在我自己的项目中使用的。