問題:私のプレーヤーモデルは最後のマウスクリックの方向に向いていますが、ゆっくり回転するのではなく、すべての可能な方法で回転します(ゲームは等角投影です。 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のラジアン)で除算してもよろしいですか? – Krab
render()メソッドが1/60秒(ish)ごとに1回呼び出されるため、なぜ制御不能になっているのかについて考えられる1つの理由が考えられます。それはあなたがしたいことを考えれば非常に非常に速いです。代わりに、デルタ時間を使用して、フレームごとのローテーションの変更を調整することができます。ここでデルタを使用する方法の良い例です:http://stackoverflow.com/questions/22405390/delta-value-in-render-method-libgdx?answertab=votes – Fish
Krab:はい、うんざりのようなものがありますnewAngleで計算するとすべての問題が修正されます 魚:うん、deltatimeを試してみよう。多分私の元のコードは本当に遅かったので、それが制御できなくなったのはなぜですか? – Boskop88