如果您在位置(100,100)处有一个精灵并且想要沿着一条线移动到位置(200,300),那么您如何以最多5像素的增量进行移动。目前,我只是使用x / y位置的差异来计算长度并一次移动精灵1/10的长度。
相反,我希望它最多移动5个像素。因此,对于这个例子,由于下一个y位置距离下一个x位置是2倍,它应该在y方向上进一步移动2x,以便精灵通过直线到达该位置。
当前代码:
public void move() {
double currentX = this.getCenterX();
double currentY = this.getCenterY();
double nextX = next.getCenterX();
double nextY = next.getCenterY();
// Used to jump by 1/10 edge length
double xDif = Math.abs(currentX - nextX);
double yDif = Math.abs(currentY - nextY);
// Move by 1/10 the length in correct direction
if (currentX > nextX) {
this.setX(this.getX() - (xDif/10));
} else if (currentX < nextX) {
this.setX(this.getX() + (xDif/10));
}
if (currentY > nextY) {
this.setY(this.getY() - (yDif/10));
} else if (currentY < nextY) {
this.setY(this.getY() + (yDif/10));
}
}
答案 0 :(得分:1)
要获得运动矢量,首先需要获取方向向量以获得方向的单位向量(长度为1的向量)。
方向向量是起点和终点x1 - x0, y1 -y0
之间的差值(差异)。
要获取单位向量,请将每个向量分量(x, y)
除以向量总数sqrt(x^2 + y^2)
。
double xDirection = currentX - nextX;
double yDirection = currentY - nextY;
double magnitude = Math.sqrt(xDirection*xDirection + yDirection*yDirection);
double xUnit = xDirection/magnitude;
double yUnit = yDirection/magnitude;
现在,如果你想只移动5个像素,那么你可以通过将单位向量的每个分量乘以5来制作移动向量:
double xMovement = xUnit * 5;
double yMovement = yUnit * 5;
this.setX(this.getX() + xMovement);
this.setY(this.getY() + yMovement);