私はゲームをデザインしており、うまく動作しています。私の1つの条件は、スプライトをあるポイントから別のポイントに移動する現在の方法がうまくいくことです...しかし、方向はやや不正確です。スプライトがそのパスの最後の場所に「スナップ」していないと、それほど悪くはありません。ここで私の正規化されたベクトルの方向が間違っているのはなぜですか?
誰かが a)は私の方向 Bの精度を向上させる助けどちらかにする可能性のある提案があります)スプライトが緩やか
場所に来るのに役立つが、点Aから運動を計算するための私のコードですBへ:ここ
if (!mMoving) {
mMoving = true;
mVecStart = new Vec(mPos.getX(),mPos.getY());
mVecEnd = new Vec(target.getX(), target.getY());
mDistanceToDestination = Vec.distanceBetween(mVecEnd, mVecStart);
mDirection = mVecStart.directionTo(mVecEnd, mDistanceToDestination);
mVelocityX = mDirection.mDX * mSpeed;
mVelocityY = mDirection.mDY * mSpeed;
}
if (mMoving == true) {
// Move along the x and y axis at given velocity, scaled by deltaTime.
this.mPos.x += mVelocityX * deltaTime;
this.mPos.y += mVelocityY * deltaTime;
// If the distance traveled exceeds the original distance computed, snap the sprite
// into place immediately.
if (mMoving && Vec.distanceBetween(mVecStart, new Vec(this.mPos.x, this.mPos.y))
>= mDistanceToDestination) {
this.mPos.x = (int) target.getX();
this.mPos.y = (int) target.getY();
mMoving = false;
mMoveComplete = true;
}
}
は方向が計算されている方法です。
public Vec directionTo(Vec vecEnd, double distance) {
return new Vec((vecEnd.mDX - this.mDX)/distance,
((vecEnd.mDY - this.mDY)/distance));
}
あなたの方向機能は私には意味がありません。開始点引数と終了点引数、または単一のベクトルを持つ必要があります。正規化は渡されません。ベクトル自体から計算する必要があります。ベクトルが間違っているか、大きさが正しくありません。あなたはテストケースが何であるか、あるいはあなたが得る答えを示さない。どちらもあなたが間違っていたことを理解するのに役立ちます。デバッガはここで尋ねるよりも速く伝えます。 – duffymo