問題: プレーヤー モデルは、最後のマウス クリックの方向に回転するはずですが、ゆっくりと回転するのではなく、考えられるすべての方法で回転します (ゲームにはアイソメトリック ビューがあり、モデルは Y 軸を中心にのみ回転するはずですが、回転します) X 軸と Z 軸の周りも)。
次のメソッド (render() で呼び出される) は、モデルの回転動作を担当します。
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);
}
そして移動方法(render()でも呼び出されます):
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;
}
最後の行で「回転」を使用しようとしましたが、回転が速くなります。
また、これは私には意味がありませんが、いくつかのテストの後、移動方法が回転方法と何らかの形で干渉しているようです(特定の方向に移動すると、モデルが特定の方法で回転します)。
ここで根本的に間違ったことをしていますか?
追加情報:
- もともと、単純なポーリングを使用して、すべてのキーボードとマウスの入力を取得しました
- 1 つの大きなメソッドで移動/回転を計算し、すべてが正常に機能しました
- libgdx の入力プロセッサを使用して、コードをより読みやすく、自由に記述できるようにすることにしました。