我让玩家通过zRotation值来控制2D环境(类似于小行星游戏)中太空船的旋转。然后我试图让导弹连续朝向飞船所面向的方向射击,所以我试图将这种冲动应用到射弹上给它这个向量:
CGVector(dx: sin(player.zRotation), dy: cos(player.zRotation))
因为zRotation以弧度为单位返回一个值。它在第一和第二象限中运行良好(想象一下笛卡尔轴系统中x从0到180)但它在其他两个中混乱并且我无法弄清楚为什么 - 导弹开始在错误的方向。我错过了重要的事吗?每个答案都将受到赞赏。
编辑:我已经找到了相当多的类似问题,但没有一个真正有助于解决我的麻烦。在这里,我不考虑其他参数如触摸坐标或敌人(x,y)位置来确定子弹轨迹;我的宇宙飞船应该只是在它前面拍摄,检测其方向的角度并相应地射击。 编辑#2:我刚才发现有一种不同的方法来实现这一点,显然工作正常。鉴于相同的矢量: let vector = CGVector(dx: sin(player.zRotation), dy: cos(player.zRotation))
我只是试图替换
applyImpulse(vector)
with:
bullet.runAction(SKAction.moveBy(vector, duration: 2))
虽然射击有点弱,所以我通过在矢量的dx和dy上乘以1000来修复它,并且它完美地工作。这对我来说听起来有点奇怪,但我仍然不明白为什么它没有使用物理引擎......