我正在设计一款游戏并且已经让它运行得很好。我的一个问题是,我目前将精灵从一个点移动到另一个点的方法效果很好......但方向有点不准确。如果精灵没有"按下"那就不会那么糟糕。在它的路径尽头到位。
是否有人可以提出任何建议 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));
}
答案 0 :(得分:1)
您可以通过将每个分量除以其大小来计算给定矢量的单位矢量。
这里是我如何计算直角坐标系中平面矢量的大小:
string code = content.Split(new[] { "/" }, StringSplitOptions.None).Last();
您应该学习如何使用Junit来测试您的课程。您将在调试器中花费更少的时间或者忽视缺陷:
package vector;
import java.awt.geom.Point2D;
/**
* Created by Michael
* Creation date 11/26/2016.
* @link
*/
public class VectorUtils {
public static double magnitude(Point2D beg, Point2D end) {
double magnitude = 0.0;
if ((beg != null) && (end != null)) {
double dx = Math.abs(end.getX()-beg.getX());
double dy = Math.abs(end.getY()-beg.getY());
if ((dx == 0.0) && (dy == 0.0)) {
magnitude = 0.0;
} else {
if (dx > dy) {
double r = dy/dx;
magnitude = dx*Math.sqrt(1.0+r*r);
} else {
double r = dx/dy;
magnitude = dy*Math.sqrt(1.0+r*r);
}
}
}
return magnitude;
}
}