【问题标题】:Box object not centered on my mouse框对象不在我的鼠标上
【发布时间】:2018-02-19 08:43:31
【问题描述】:

1我正在尝试一些 Java 游戏开发,到目前为止,我已经创建了一个可以通过键输入移动的框,现在我正在尝试鼠标输入。我有几个问题...

  1. 我正在使用一个名为 MouseInput 的类,它实现了 MouseMotionListener,这是获取鼠标坐标的正确方法吗?
  2. 我的盒子跟随我的鼠标,但偏移量很大,您认为问题可能是什么?

鼠标输入事件的代码如下:

 @Override
public void mouseMoved(MouseEvent e) {

    for (int i = 0; i < handler.object.size(); i++) {
        GameObject tempObject = handler.object.get(i);

        if (tempObject.getId()==ID.Player) {

            tempObject.setX(MouseInfo.getPointerInfo().getLocation().x);
            tempObject.setY(MouseInfo.getPointerInfo().getLocation().y);
        }
    }
}

附图显示了盒子,我的鼠标位于左上角0,0。

【问题讨论】:

  • 1) 鼠标事件也有坐标(相对于作为事件发起者的对象),所以最好使用它。但在某些情况下(当您需要屏幕坐标时)您也可以使用MouseInfo 类。 2) 在我们得到一个简短的可运行的问题示例 (SSCCE) 之前,无法回答这个问题,因此我们也可以运行和调试它。可能您只需要在主面板 (tempObject.getParent().repaint()) 上调用 revalidate()repaint() 方法。
  • 我设法通过创建 2 个变量 mPosX = e.get() 和 mPosY = e.getY() 来解决这个问题,然后将 tempObject 设置为这些位置,这是否有原因? ?如果你知道,谢谢你
  • 如需尽快获得更好的帮助,请发帖minimal reproducible exampleShort, Self Contained, Correct Example
  • My box follows my mouse but on a huge offset X 和 Y 得到的偏移量是多少?

标签: java swing mouseevent


【解决方案1】:
@Override
public void mouseMoved(MouseEvent e) {

    mPosX = e.getX();
    mPosY = e.getY();

    System.out.println(mPosX + ", " + mPosY);

    for (int i = 0; i<handler.object.size(); i++){
        GameObject tempObject = handler.object.get(i);

        if (tempObject.getId() == ID.Player){
            tempObject.setX(mPosX);
            tempObject.setY(mPosY);
        }
    }
    e.consume();
}

这里的代码似乎可以解决问题,但是我不完全确定原因。

【讨论】:

  • MouseInfo 类为您提供鼠标相对于屏幕的位置。除非包含对象的面板位于 (0, 0) 处,否则您将始终有一个偏移量。当您使用来自 MouseEvent 的值时,这些点现在与您添加 MouseMotionListener 的组件相关。
猜你喜欢
  • 2016-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
  • 2016-11-23
  • 2022-01-16
相关资源
最近更新 更多