物体没有停在目标位置
object not stopping at target location
我有一个游戏,你点击它,物体就会移动到它上面。它有时会停在目标处,但有时会继续前进……我真的很困惑可能导致此问题的原因。希望这不是一件容易的事 xD 因为我已经编码了一段时间了。任何 ideas/tips 都可以在评论中留下。 ;)
鼠标
@Override
public void mousePressed(MouseEvent e) {
c.x = e.getX();
c.y = e.getY();
if (unit == false) {
if (s == false) {
for (Hazmat h1 : outbreak.hazmat) {
if (c.getBounds().intersects(h1.bounds) || c.contains(h1.bounds)) {
selected = h1;
s = true;
unit = true;
Info.log("Selected unit. (First)");
}
}
}
} else {
selected.re = true;
Info.log("Sending unit to location!");
targetX = e.getX();
targetY = e.getY();
selected.targetX = e.getX();
selected.targetY = e.getY();
float xSpeed = (targetX - (float) selected.x) / .1f;
float ySpeed = (targetY - (float) selected.y) / .1f;
float factor = (float) (1.0f / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));
xSpeed *= factor;
ySpeed *= factor;
selected.velx = xSpeed;
selected.vely = ySpeed;
s = false;
unit = false;
Info.log("-----------------");
Info.log("xSpeed: " + xSpeed);
Info.log("ySpeed: " + ySpeed);
Info.log("Factor: " + factor);
Info.log("TargetX: " + targetX);
Info.log("TargetY: " + targetY);
Info.log("-----------------");
}
}
对象
x += velx;
y += vely;
bounds.x = (int) x;
bounds.y = (int) y;
if (re == true) {
if (bounds.x == targetX && bounds.y == targetY) {
velx = 0;
vely = 0;
Info.log("[!] Target Point Reached [!]");
re = false;
}
}
检查两个浮点值是否相等经常会遇到非常小的精度误差问题。值 bounds.x
和 targetX
可能相差 0.00000001
点,但您的检查 bounds.x == targetX
会失败。
相反,尝试这样的事情:
if ((bounds.x - targetX) < 0.0001 && (bounds.y - targetY) < 0.0001)
我有一个游戏,你点击它,物体就会移动到它上面。它有时会停在目标处,但有时会继续前进……我真的很困惑可能导致此问题的原因。希望这不是一件容易的事 xD 因为我已经编码了一段时间了。任何 ideas/tips 都可以在评论中留下。 ;)
鼠标
@Override
public void mousePressed(MouseEvent e) {
c.x = e.getX();
c.y = e.getY();
if (unit == false) {
if (s == false) {
for (Hazmat h1 : outbreak.hazmat) {
if (c.getBounds().intersects(h1.bounds) || c.contains(h1.bounds)) {
selected = h1;
s = true;
unit = true;
Info.log("Selected unit. (First)");
}
}
}
} else {
selected.re = true;
Info.log("Sending unit to location!");
targetX = e.getX();
targetY = e.getY();
selected.targetX = e.getX();
selected.targetY = e.getY();
float xSpeed = (targetX - (float) selected.x) / .1f;
float ySpeed = (targetY - (float) selected.y) / .1f;
float factor = (float) (1.0f / Math.sqrt(xSpeed * xSpeed + ySpeed * ySpeed));
xSpeed *= factor;
ySpeed *= factor;
selected.velx = xSpeed;
selected.vely = ySpeed;
s = false;
unit = false;
Info.log("-----------------");
Info.log("xSpeed: " + xSpeed);
Info.log("ySpeed: " + ySpeed);
Info.log("Factor: " + factor);
Info.log("TargetX: " + targetX);
Info.log("TargetY: " + targetY);
Info.log("-----------------");
}
}
对象
x += velx;
y += vely;
bounds.x = (int) x;
bounds.y = (int) y;
if (re == true) {
if (bounds.x == targetX && bounds.y == targetY) {
velx = 0;
vely = 0;
Info.log("[!] Target Point Reached [!]");
re = false;
}
}
检查两个浮点值是否相等经常会遇到非常小的精度误差问题。值 bounds.x
和 targetX
可能相差 0.00000001
点,但您的检查 bounds.x == targetX
会失败。
相反,尝试这样的事情:
if ((bounds.x - targetX) < 0.0001 && (bounds.y - targetY) < 0.0001)