使用Swift将精灵旋转到精灵位置不精确的SpriteKit中

par*_*son 5 sprite-kit swift

我正在尝试将玩家旋转到触摸状态.使用触摸移动功能,我将位置设置为变量.然后我调用一个函数.它工作但角度是关闭的.位置是全局变量,玩家是我要转的精灵.大约15度.

   func rotatePlayer(){

     let angle = atan2(location!.y - player!.position.y , location!.x - player!.position.x)
    player?.zRotation = angle
}
Run Code Online (Sandbox Code Playgroud)

0x1*_*41E 2

根据SpriteKit 最佳实践文档

\n\n
\n

使用与 SpriteKit\xe2\x80\x99s 坐标和旋转约定匹配的游戏逻辑和艺术资源。这意味着将艺术品定向到右侧。如果您将图稿定向到其他方向,则需要在图稿使用的约定和 SpriteKit 使用的约定之间转换角度。

\n
\n\n

由于默认的宇宙飞船指向上方(当 zRotation 为 0 时),因此您需要将角度偏移 90 度(pi/2 弧度),以便当 zRotation 为零时飞船面向右侧:

\n\n
player?.zRotation = angle - CGFloat(M_PI_2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者,您可以将宇宙飞船旋转到右侧。要旋转图像,请单击 Assets.xcassets,然后单击 Spaceship。右键单击太空飞船图像,然后选择“在外部编辑器中打开”菜单项。这将在预览应用程序中打开图像。在“预览”中,选择“工具”>“向右旋转”并退出“预览”。通过旋转图稿,您的代码应该无需任何更改即可运行。

\n