java - 物体没有停在目标位置

标签 java swing mouselistener

我有一个游戏,你点击它,物体就会移动到它上面。它有时会停在目标处,但有时会继续前进……我真的很困惑可能导致此问题的原因。希望这不是一件容易的事 xD 因为我已经编码了一段时间了。任何想法/提示都可以在评论中留下。 ;)

鼠标

@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.xtargetX 可能是 0.00000001 点分开,但是你的检查 bounds.x == targetX会失败。

相反,尝试这样的事情:

if ((bounds.x - targetX) < 0.0001 && (bounds.y - targetY) < 0.0001)

关于java - 物体没有停在目标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44400618/

相关文章:

Java:在绘制主 Canvas 的类之外使用 Graphics 进行绘制

java - 使用 Ant 从同一代码库构建 Swing 和 Android 应用程序

java - 如何从其他类java swing调用JButton

java - 可编辑 JCombobox mouseclicked 事件不起作用

java - 在 Java 中停止 MouseMoved 事件

java - 在对话框中有两个 editText 并根据这些将肯定按钮设置为启用

java - Spring MVC 3 : Returning XML through @ResponseBody

Java如何为按钮分配id并检索它们?

java - 如何监听子组件?

java - 将 facebook 的大文本文件加载到内存 (39MB) 以进行自动补全