Я разрабатываю игру и получаю много ее работы. Моя единственная проблема заключается в том, что мой текущий метод перемещения спрайта из одной точки в другую хорошо работает ... но направление несколько неточно. Это было бы не так уж плохо, если бы спрайт не «встал» на место в конце своего пути.Почему мое направление настолько неточно для моего нормализованного вектора?
Есть ли предложение кто-то может сделать либо а) Помогите улучшить точность моего направления б) Помогите сделать спрайт прийти на место более мягко
Вот мой код для вычисления движения от точки А к 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