2017-02-05 7 views
1

LibGDXのTouchpadクラスのtouchpadを使ってプレイヤーを移動しています。しかし、今私は、touchpadのの位置に応じて、8方向にしか移動できず、それぞれの方向に移動できないようにしたいと考えています。プレイヤーをLibGDXのタッチパッドで45度だけ動かす

上、右、右、右下、下、下左、左、左。したがって、これらの方向の間の角度は45°です。

運動のための現在のコードは次のとおりです。

player.setX(player.getX() + touchpad.getKnobPercentX() * Constants.SPEED); 
player.setY(player.getY() + touchpad.getKnobPercentY() * Constants.SPEED); 

私はプレイヤーが唯一のこれらの8つの方向のいずれかに移動するように変更する必要がありますか?私はノブの位置を丸めなければならないと思いますが、正確にそれを行う方法はわかりません。

touchpadknobは、もはや「スムーズ」に移動してはならず、これらの8つの位置のうちの1つに「ジャンプ」するだけで、どの方向が現在アクティブであるかを直接見ることができます。

誰でもこの問題を手伝うことができますか、それを処理する別の方法がありますか?

+0

ノブのパーセントは、0〜100または0〜1から戻っていますか? –

+0

-1と1の間の値です(ノブが中央にある場合は0です)。 – erik4thewinners

答えて

1

これを試してみてください、事前にありがとうそれを把握するために1時間のように私を取ったので、私はそれがあなたのために働く願っています!

float dx = touchpad.getKnobPercentX(); 
float dy = touchpad.getKnobPercentY(); 

int direction = Math.floor((Math.atan2(dy, dx) + Math.PI/8)/(2*Math.PI/8)); 
if (direction == 8) direction = 0; 
double angle = direction * (Math.PI/4); 

player.setX(player.getX() + Math.cos(angle) * Constants.SPEED); 
player.setY(player.getY() + Math.sin(angle) * Constants.SPEED); 

基本的にノブの角度を見つけて、方向(1つは8つ)を見つけます。方向に45°を掛けてそれに対応する角度を得るためにMath.PI/4を乗算する。

+0

素晴らしいです、それは私にとっても完璧です。ありがとうございました! ノブの動作をどのように変更して、これらの45°ステップでもジャンプする可能性がありますか? – erik4thewinners

+0

いいえ、画面上にノブの位置を設定する必要がありますが、これは可能ではないようです。受け入れることを忘れないでください! :) –

関連する問題