問題:我的播放器模型應該轉變爲最後一次鼠標點擊的方向,但不是慢慢轉動,它會以各種可能的方式旋轉(遊戲具有等軸視圖,模型應該是僅圍繞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