我有一个在Z轴上向前和向后移动的角色.要向左和向右移动,而不是扫射,我希望它们旋转(分别按下左右箭头键),然后当它们再次向前/向后按压时,它们朝着它们面向的方向移动.
所以我所做的是让左/右函数在一个角度变量上加/减少量,用于绘制角色的旋转.然后向前/向后功能将少量加/减到x和z轴变量.它们如下(向后):
z -= 0.005f * Math.cos(heading); x -= 0.005f * Math.sin(heading)
标题变量是由左右箭头键操纵的角度.
我认为这样可行,因为当玩家直接前进时,标题为0,因此cos(0)= 1且sin(0)= 0,这意味着它们在X上无处移动但在Z上转发完整的0.005量.我想我的基本三角知识并不是完全合理的,因为如果我转了一下然后向前移动它们会向那个方向移动但是如果我向前移动一点然后向前移动它们会在同一条线上移动,如果它旋转90度,并继续然后再次好像它是180度然后270度等.
编辑:我会试着更好地解释一下,基本上如果我向左转后向前按它将朝我想要的方向前进,但是如果我放开前进,再向前转一点然后再向前推,角度已经增加了它应该有的但是方向是从它应该去的方向绕90度.对不起,我无法解释这个问题.
编辑:好的,我得到一些奇怪的问题,我认为可能导致奇怪的“90度”问题,当我让角色看起来90度(通过硬编码航向= 90)左/右,cos(标题)应该是0对吗?但由于某种原因,它出现为-0.44,如果我cos-1(-0.44)我得到116.1,它是否与Math.cos()有关,想要弧度或其他角度?我完全迷失在这里.
这是解决这个问题的正确方法吗?我完全陷入了试验和错误标志的错误…
任何回复表示赞赏,
谢谢
InfinitiFizz
(另外,我知道我应该使用deltaTime来表示字符的速度/旋转值,而不是硬编码的0.005f,但我希望在排序之前先解决这个问题).
它应该是*不是基于:
x = r cos (theta) y = r sin (theta)
你会想要:
z -= 0.005f * Math.cos(heading); x -= 0.005f * Math.sin(heading);
如果这就是你要追求的?我必须承认,我并不完全理解您对实际情况的描述.
编辑:您可能希望使用比“0.005”更大的“半径”,具体取决于坐标系的工作方式.