Java 基于鼠标位置的移动-不必要的偏移

Java 基于鼠标位置的移动-不必要的偏移,java,Java,我正在做乒乓球游戏,我无法让玩家和AI球拍正确移动。这种解释可能有点混乱 首先是运动员的桨。我将为AI提出一个单独的问题,以保持这篇文章的长度在合理范围内 高度和宽度定义了桨的大小,图像是桨的纹理 double mouseY = MouseInfo.getPointerInfo().getLocation().getY(); if (mouseY < getHeight() - HEIGHT) { paddleLeft.setLocation(2 *

我正在做乒乓球游戏,我无法让玩家和AI球拍正确移动。这种解释可能有点混乱

首先是运动员的桨。我将为AI提出一个单独的问题,以保持这篇文章的长度在合理范围内

高度
宽度
定义了桨的大小,
图像
是桨的纹理

double mouseY = MouseInfo.getPointerInfo().getLocation().getY();
        if (mouseY < getHeight() - HEIGHT) {
            paddleLeft.setLocation(2 * WIDTH, mouseY);
            image.setLocation(2 * WIDTH, mouseY);
            image.sendToFront();
        } else {     

                   // stop paddle from sliding off screen

            paddleLeft.setLocation(2 * WIDTH, getHeight() - HEIGHT);
            image.setLocation(2 * WIDTH, getHeight() - HEIGHT);
            image.sendToFront();
但我的光标仍然并没有和挡板对齐,我只能在屏幕截图2所示的范围内移动挡板:(光标位于顶部窗口边框上)


从屏幕鼠标坐标中减去帧的X和Y屏幕位置,以获得帧中的偏移量,或为帧本身添加一个适当的值,这将在窗口客户端坐标中提供鼠标位置

不管怎样,侦听器方法通常更好,因为它意味着您也可以,例如,在不影响鼠标代码的情况下,向窗口添加其他组件;它使所有内容在游戏框架中保持独立。

您不应滥用
MouseInfo
来实现类似的功能。正如在回答中已经提到的:使用合适的
鼠标侦听器
,问题无论如何都会消失意味着在游戏窗口内,而
getY()整个电脑都死机了,所以我交换了它,它就工作了。
public void mouseMoved(MouseEvent e) {
     mouseY=e.getYOnScreen();
}