私は現在、A * pathfinding関数の結果からポイント(x、y)の配列を持っています。この配列は、最初のインデックスが文字に最も近いポイントであり、次のインデックスがパスで移動する必要がある次のポイントになるように設定されます。ポイントの配列間で文字を確実に移動するにはどうすればよいですか?
これらの点がグリッド上にある(現在のグリッド上の各点間の8個のピクセルが、これはchangableです。)彼はその時点で到着したとき
私の現在の戦略は、最初のポイントに文字を移動することですそれから、次のものに移動してください。
文字からそのポイントまでのベクトルを作成し、それがどこまであるかを調べることで、最初のポイントに移動します。それから私は角度を見つけ、その方向に動く。
// How the character is moved
double xMove = Math.cos(charAngle * (Math.PI/180)) * 0.1 * delta;
double yMove = Math.sin(charAngle * (Math.PI/180)) * 0.1 * delta;
x += xMove;
y += yMove;
absVx -= Math.abs(xMove);
absVy -= Math.abs(yMove);
absVX
とabsVy
ストア絶対距離を移動したまま、それを移動後ごとにデクリメントされます。それらが両方ともゼロ以下の場合、目的地に到達したので、配列から削除し、次のポイントですべてを再計算します。
私には2つの問題があります。
時にはキャラクターがポイントを飛ばしてから、永遠に移動します。これは、ゲームエンジンが動き(滑らかな)に加えるデルタに起因する可能性が高く、キャラクターがあまりにも遠くに動くので、私はこのキャラクターについてはわかりません。
これは、宛先を1回クリックするとうまくいきますが、必要なのはマウスボタンを押し続けることだけです。私がマウスを押したままにすると、現在のところ、キャラクターは最初のポイントで単に「立っている」だけです。
私は2番目の問題の解決策を考えましたが、それは良いことではありません。最後のマウスクリックから移動したい場所を保存しますが、移動先のポイントを渡すまで実際には計算しません。
だから、私は本当に賢いと楽しい誰かがこのことについて私と少し会話を持っていることを願って:D
私はこの秋にコンピュータグラフィックスを開始します:)ポインタをありがとう! –
私はブレーゼンハムのラインを作り、それに沿ってキャラクターを動かしました。ありがとう。 –