Sprite Kit翻转播放器XScale

问题描述 投票:0回答:2

我的_player有一个SKSpriteNode,并且_player节点有两个孩子组成我的角色。

具有这种配置的子画面具有朝右的字符。

[当我需要让角色面对左手时,我尝试使用xScale = -1.0,但是当我这样做时,由于我的CGRectIntersectsRect的行为就像角色仍在面对原始方向一样,所以帧似乎并没有反映屏幕上看到的内容。

除了cgrect问题外,我还把字符朝对象旋转,所以我最终不得不做这样的事情:

 if( sprite.xScale == -1.0){
    sprite.zRotation = atan2f(direction.y, direction.x);
    } else {
        sprite.zRotation = atan2f(-direction.y, -direction.x);
    }

什么是翻转播放器的正确方法。如果我使用xScale,似乎对于碰撞检测来说,数学将变得不必要地复杂。我是否需要两个玩家实例,每个实例都面向每个方向。我需要两组精灵吗?

ios sprite-kit xscale
2个回答
0
投票

这里是一个可以解决您问题的教程。http://www.raywenderlich.com/45152/sprite-kit-tutorial-animations-and-texture-atlases我发现它非常有帮助。项目中的熊会根据您触摸屏幕的哪一侧而翻转。我认为您的答案是6号...


0
投票

这很晚了,但我想我找到了解决方案。创建一个全局节点(跟踪位置),并将xscale和yscale节点作为子节点添加到该全局节点。您现在可以跟踪位置(全局),而不必担心-xscale / -yscale(子级)会影响场景中的位置查找。您可能需要使用以下方法获取全局节点位置:

guard let scene = node?.scene else { fatalError("Wait 😱 this node is not inside a scene!?") } let nodePositionScene = node!.convert(node!.position, to: scene)

© www.soinside.com 2019 - 2024. All rights reserved.