Actor 在靠近目标 Vector2 时会抖动
Actor shakes when it is near the destination Vector2
问题是当 Actor/Entity 向点击位置移动时,当它离开大约 1 个方格时,角色开始摇晃,因为它向上移动 7 个像素,然后向下移动 7 个像素,一遍又一遍地没有到达目的地。
我尝试了几种不同的方法,但似乎都以相同的方式结束,它可能只需要上升几个像素,但由于速度是 7,它移动得太远,然后又移动回来.
if (Objects.nonNull(next)) {
if (this.getDistanceVector(next) <= 64) {
return;
}
double destX = next.y*64 - this.getX();
double destY = next.x*64 - this.getY();
double dist = Math.sqrt(destX * destX + destY * destY);
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.moveBy((float) travelX, (float)travelY);
} else {
moveTo = null;
}
它应该走到那个位置然后停下来,它现在走得很近,然后根据点击的位置在 x 轴或 y 轴上摇晃。
通过检查速度是否大于距离,我能够顺利过渡,没有任何抖动。
if (speed > dist) {
destX = target.y - this.getX();
destY = target.x - this.getY();
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.setX((int)travelX);
this.setY((int)travelY);
} else {
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.moveBy((float) travelX, (float)travelY);
}
问题是当 Actor/Entity 向点击位置移动时,当它离开大约 1 个方格时,角色开始摇晃,因为它向上移动 7 个像素,然后向下移动 7 个像素,一遍又一遍地没有到达目的地。
我尝试了几种不同的方法,但似乎都以相同的方式结束,它可能只需要上升几个像素,但由于速度是 7,它移动得太远,然后又移动回来.
if (Objects.nonNull(next)) {
if (this.getDistanceVector(next) <= 64) {
return;
}
double destX = next.y*64 - this.getX();
double destY = next.x*64 - this.getY();
double dist = Math.sqrt(destX * destX + destY * destY);
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.moveBy((float) travelX, (float)travelY);
} else {
moveTo = null;
}
它应该走到那个位置然后停下来,它现在走得很近,然后根据点击的位置在 x 轴或 y 轴上摇晃。
通过检查速度是否大于距离,我能够顺利过渡,没有任何抖动。
if (speed > dist) {
destX = target.y - this.getX();
destY = target.x - this.getY();
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.setX((int)travelX);
this.setY((int)travelY);
} else {
destX = destX / dist;
destY = destY / dist;
double travelX = (destX * speed);
double travelY = (destY * speed);
this.moveBy((float) travelX, (float)travelY);
}