【问题标题】:Mouse position based movement - unnecessary offset基于鼠标位置的移动 - 不必要的偏移
【发布时间】:2014-04-04 03:52:55
【问题描述】:

我正在制作 Pong 游戏,我无法让玩家和 AI 桨正确移动。这个解释可能有点混乱。

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

HEIGHTWIDTH 定义桨的大小,image 是桨的纹理

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

玩家的球拍被鼠标控制。现在,当我将光标移动到屏幕顶部时,我的拨片(顶部边框)触及窗口顶部。这可以被认为是正确的,但我不喜欢它。如果我将窗口移动到屏幕的中心,我需要将鼠标移出屏幕才能转向。它的工作原理是这样的:

并且我希望桨的顶部边框与光标 Y 坐标平行。我尝试使用不同的代码来获取鼠标位置:

addMouseListeners();

public void mouseMoved(MouseEvent e) {
     mouseY=e.getYOnScreen();
}

但是我的光标仍然没有与桨对齐,我只能在屏幕截图 2 所示的范围内移动我的桨:(光标位于顶部窗口边框上)

【问题讨论】:

  • 你应该滥用 MouseInfo 来做类似的事情。正如答案中已经提到的:使用正确的MouseListener,无论如何问题都会消失。

标签: java


【解决方案1】:

从屏幕鼠标坐标中减去框架的 X 和 Y 屏幕位置以获得框架中的偏移量,或者在框架本身中添加适当的MouseListener,这将提供窗口客户端坐标中的鼠标位置。

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

【讨论】:

  • 我以为getYOnScreen(); 是在游戏窗口内,而getY(); 是整个电脑屏幕,所以我把它换掉了。
猜你喜欢
  • 2018-10-21
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多