问题:我的播放器模型应该转变为最后一次鼠标点击的方向,但不是慢慢转动,它会以各种可能的方式旋转(游戏具有等轴视图,模型应该是仅围绕Y轴旋转,但也围绕X轴和Z轴旋转)。Java/libgdx 3D模型旋转错误
以下方法(称为渲染())负责模型的转弯行为:
public static void turnUnit(){
if(Gdx.input.isButtonPressed(Input.Buttons.LEFT)){
mX = Gdx.input.getX();
mY = Gdx.input.getY();
angle = (float) (180+Math.atan2(mX-Gdx.graphics.getWidth()/2, mY-Gdx.graphics.getHeight()/2)*(180/Math.PI));
newAngle = ((((currentAngle - angle) % 360) + 540) % 360) - 180;
turning = newAngle/60*turnRate;
currentAngle = currentAngle-turning;
}
TestGround.player.transform.setToRotation(Vector3.Y, currentAngle).setTranslation(posX,0,posZ);
}
和运行法(也称为渲染()):
public static void movement(){
if(northM==true){
TestGround.player.transform.trn(0,0,-1f);
}
if(southM==true){
TestGround.player.transform.trn(0,0,1f);
}
if(westM==true){
TestGround.player.transform.trn(-1f,0,0);
}
if(eastM==true){
TestGround.player.transform.trn(1f,0,0);
}
posX = TestGround.player.transform.getTranslation(Vector3.X).x;
posY = TestGround.player.transform.getTranslation(Vector3.Y).y;
posZ = TestGround.player.transform.getTranslation(Vector3.Z).z;
}
试图在最后一行使用“旋转”,但它只是旋转得更快。
此外,即使这对我来说没有意义,但经过一些测试后,似乎移动方法会干扰转动方法(沿特定方向移动将以某种方式旋转模型)。
我在这里做了一些根本性的错误吗?
附加信息:
- 原来我用简单的投票来获得所有键盘和鼠标输入
- 计算的移动/旋转在一个大的方法,一切工作 精细
- 决定使用的inputprocessor libgdx使代码更具可读性和开放性
我刚刚看到180/Math.PI - 你确定要用180(180弧度)来分割180吗? – Krab
为什么你失去控制可能是因为render()方法每1/60(ish)秒被调用一次。考虑到你想要做什么,这是非常非常快的。相反,您可能需要使用增量时间来缓和每个帧的旋转变化。下面是如何使用德尔塔的一个很好的例子:http://stackoverflow.com/questions/22405390/delta-value-in-render-method-libgdx?answertab=votes – Fish
Krab:是的数学有一种不可思议,但newAngle中的计算修复了所有可能的问题 鱼:好的,我会尝试deltatime,如果它有效,我会报告回来。也许我原来的代码真的很慢,这就是为什么它没有失去控制? – Boskop88