我对OpenGL还很陌生,但基本三角函数掌握得不错(自学以来,已经遗忘了很多!),但我在这方面遇到了一些问题。
我的角色沿Z轴前后移动。为了向左和向右移动,我想要它们旋转(分别按左箭头和右箭头键时),然后再按前/后键时,它们就会朝着它们面对的方向移动。
所以我编写了左/右函数,将小量加/减到一个角度变量上,该变量用于绘制角色旋转。然后前/后函数将小量加/减到X和Z轴变量上。它们如下所示(用于向后移动):
变量heading是由左右箭头键控制的角度。我以为这会起作用,因为当玩家直向前方时,heading为0,所以cos(0)=1,sin(0)=0,这意味着他们在X轴上不动,在Z轴上完全向前移动了0.005个单位。我想我的初步三角学知识不完全正确,因为如果我转弯一点然后向前移动,它们就朝那个方向前进,但如果我再移动一点然后向前移动,它们就像旋转了90度的同一条线路,然后继续像旋转了180度、270度等一样。
我的角色沿Z轴前后移动。为了向左和向右移动,我想要它们旋转(分别按左箭头和右箭头键时),然后再按前/后键时,它们就会朝着它们面对的方向移动。
所以我编写了左/右函数,将小量加/减到一个角度变量上,该变量用于绘制角色旋转。然后前/后函数将小量加/减到X和Z轴变量上。它们如下所示(用于向后移动):
z -= 0.005f * Math.cos(heading);
x -= 0.005f * Math.sin(heading)
变量heading是由左右箭头键控制的角度。我以为这会起作用,因为当玩家直向前方时,heading为0,所以cos(0)=1,sin(0)=0,这意味着他们在X轴上不动,在Z轴上完全向前移动了0.005个单位。我想我的初步三角学知识不完全正确,因为如果我转弯一点然后向前移动,它们就朝那个方向前进,但如果我再移动一点然后向前移动,它们就像旋转了90度的同一条线路,然后继续像旋转了180度、270度等一样。
编辑:我会尽力更好地解释一下,基本上,如果我向左转后按向前键,它将朝我想要的方向前进,但如果我松开向前键,再转一点,然后再按向前键,角度已经增加了,但方向就像是从应该去的方向旋转了90度。抱歉,我无法很好地解释这个问题。
编辑:好吧,我遇到了一些奇怪的问题,我认为这可能导致了奇怪的“90度”问题,当我让角色向左/右看90度(通过硬编码heading=90)时,cos(heading)应该是0,对吧?但出于某种原因,它的值是-0.44,如果我cos-1(-0.44),我得到116.1,这是Math.cos()想要弧度角度之类的东西吗?我完全迷失了。
这是解决这个问题的正确方法吗?我完全被负号困住了……
任何回复都受到欢迎,
谢谢
InfinitiFizz
(此外,我知道应该使用deltaTime来为角色的速度/旋转值而不是硬编码的0.005f,但我想先解决这个问题再进行排序)。