首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >面对英雄?(旋转到另一个节点的方向)

面对英雄?(旋转到另一个节点的方向)
EN

Stack Overflow用户
提问于 2014-05-08 07:48:13
回答 2查看 768关注 0票数 2

我有两个spriteNodes英雄和敌人,都是用矩形physicsBody应用的。在更新中,当英雄到达一定的位置时,例如英雄位置.y <= 300,我希望敌人在英雄向下移动时旋转并面对英雄。

我找到的唯一示例代码是来自苹果的冒险,它有一个faceTo类,但我发现它的使用非常复杂。我正在寻找一个好的,干净的解决方案。

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-08 08:53:59

最基本的实现应该如下所示:

代码语言:javascript
复制
- (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)的内容,并尝试了解上面的代码是如何工作的。

票数 2
EN

Stack Overflow用户

发布于 2014-05-08 09:03:02

您可以使用xScale属性的SKNode使雪碧面对相反的方式。这可以通过设置:

代码语言:javascript
复制
sprite.xScale = -1.0;

然而,事实证明,这会导致physicsBody出现问题,从这个问题可以看出:

翻转x级中断碰撞处理(SpriteKit 7.1)

JKallio给出了这个问题的解决方案。

他建议将您的sprite保留为另一个SKNode (应用physicsBody)的子节点,并在需要时更改子节点的xScale属性。这也是我在我自己的项目中使用的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23535777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档