gpt4 book ai didi

java - 如何沿着一条线将 Sprite 一次移动一定数量的像素?

转载 作者:行者123 更新时间:2023-12-01 10:20:58 26 4
gpt4 key购买 nike

如果您在位置 (100, 100) 处有一个 Sprite ,并且想要将其沿着一条线移动到位置 (200, 300),那么如何以最多 5 个像素的增量进行此操作。目前,我只是使用 x/y 位置的差异来计算长度并一次将 Sprite 移动长度的 1/10。

相反,我希望它最多移动 5 个像素。因此,对于此示例,由于下一个 y 位置比下一个 x 位置远 2 倍,因此它应该在 y 方向上进一步移动 2 倍,以便 Sprite 通过直线到达该位置。

当前代码:

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));
}
}

最佳答案

要获取运动 vector ,首先需要获取方向 vector ,以便获取方向的单位 vector (长度为 1 的 vector )。

方向 vector 是起点和终点之间的增量(差值)x1 - x0, y1 -y0

要获得单位 vector ,请获取每个 vector 分量 (x, y) 并将其除以 vector 总大小 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 个像素,那么您可以通过将单位 vector 的每个分量乘以 5 来得出移动 vector :

double xMovement = xUnit * 5;
double yMovement = yUnit * 5;

this.setX(this.getX() + xMovement);
this.setY(this.getY() + yMovement);

关于java - 如何沿着一条线将 Sprite 一次移动一定数量的像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629000/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com