gpt4 book ai didi

java - mouseMoved 事件似乎只被调用一次

转载 作者:行者123 更新时间:2023-12-02 12:18:36 28 4
gpt4 key购买 nike

尝试用头顶摄像头制作一个简单的角色扮演游戏。当我去实现一个 MouseMotionListener 时(这不是我第一次使用 MouseMotionListener),似乎 mousedMoved MouseEvent 只获取调用一次然后简单似乎不再起作用了。我已经在这个问题上坚持了相当长的一段时间,而我所有的研究都将我带入了死胡同。

我确实有一个带有刻度和渲染方法的完整游戏循环。但是正如您在下面的代码中看到的,在鼠标处理类中(代码的底部位)它返回一个数字,每次鼠标移动时该数字都会增加一(在tick方法中,我将数字的值打印到控制台) )并且它还应该将鼠标的 x 和 y 坐标打印到控制台。当您运行该程序时,该数字等于 1,并且仅打印一次鼠标坐标。一个例子是控制台输出将如下所示:

124 82
1

或者,如果我的鼠标在程序启动时没有悬停在 JFrame 上,它将如下所示:

0

这是我的游戏循环的初始化方法:

private void init() {
display = new Display("Operation Blood Bath: Alpha 0_5.0", 800, 600);
game = new Game();
Assets.init();
}

这是我的显示类,它在 init 方法中被调用:

public class Display {

private JFrame frame;
private Canvas canvas;

public Display(String title, int width, int height) {
frame = new JFrame(title);
frame.setSize(width, height);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setVisible(true);

canvas = new Canvas();
canvas.setPreferredSize(new Dimension(width, height));
canvas.setMaximumSize(new Dimension(width, height));
canvas.setMinimumSize(new Dimension(width, height));
canvas.setFocusable(false);

frame.add(canvas);
frame.addMouseMotionListener(new MouseMotionHandling());
frame.pack();
}

public Canvas getCanvas() {
return canvas;
}

public JFrame getFrame() {
return frame;
}

}

勾选方法:

private void tick() {
game.tick();
System.out.println(MouseMotionHandling.HELLO());
}

这是在显示类中调用的鼠标处理类:

public class MouseMotionHandling implements MouseMotionListener {

private static int number = 0;

@Override
public void mouseDragged(MouseEvent arg0) {

}

@Override
public void mouseMoved(MouseEvent arg0) {
System.out.println(arg0.getX() + " " + arg0.getY());
number++;
}

public static int HELLO () {
return number;
}

}

我要去哪里工作?

最佳答案

问题是您的 canvas 完全填充了 JFrame 的内容 Pane ,因此捕获了所有鼠标事件。最简单的解决方法是将鼠标监听器添加到 canvas 而不是 frame

至于为什么您在框架上收到单个鼠标事件 - 我认为这一定是由于创建各种组件时的计时问题。

关于java - mouseMoved 事件似乎只被调用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45970588/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com