gpt4 book ai didi

java - 线程中的 MouseMotionListener

转载 作者:行者123 更新时间:2023-12-01 13:05:11 27 4
gpt4 key购买 nike

我是 Java 新手,现在我正在尝试了解线程。

我目前正在开发一款“让球弹起来,否则你就输”的游戏。

在这个游戏中,有一个球会从“墙”或“梁”上弹起。

墙随着光标的 x 位置移动。没有 y 轴运动。

现在我无法使用计时器,因为如果我这样做,我的 MouseMotion 和球运动将会有相同的延迟。

我想要实现的是延迟 10 毫秒获取鼠标运动信息,延迟 200 毫秒获取球运动信息。

使用计时器,我必须选择墙和球的延迟。 10 毫秒对于墙运动来说非常好,因为当我移动鼠标时它会立即移动,但对于球运动来说太快了。即使是查克·诺里斯也无法快速移动鼠标让球从墙上弹开。

我尝试创建 2 个不同的计时器,但它不接受鼠标监听器。 ActionListenerTimer 接受的唯一监听器,但由于某种原因,如果我使用单个监听器,它仍然会触发 actionPerformed 方法旁边的鼠标运动方法以 this 作为参数的计时器。但这给球和墙带来了相同的延迟。

这就是为什么我需要线程来完成它。但我不知道如何在 Thread 内从 MouseListener 获取鼠标运动信息到 paintComponent

希望大家理解我的问题。

编辑:

这就是我现在尝试获得 10 毫秒的墙延迟和 200 毫秒的球延迟的方法:

private Timer trigger = new Timer(200, this);
private Timer wall = new Timer(10, this);

在paintComponent中

if ((start.getText() == "Spiel aktiv..." || trigger.isRunning() == true) || wall.isRunning() == true) {
g.setColor(new Color(255, 254, 102));
g.fillRect(x, screen.getHeight() - 15, length, 10);
}

if ((start.getText() == "Spiel aktiv..." || trigger.isRunning() == true) && wall.isRunning() == false) {

ball_x = ball_x + dx;
ball_y = ball_y + dy;

if (ball_x > (screen.getWidth() - 100) || ball_x < 10) {
dx = -dx;
bounce = true;

}

if (ball_y > (screen.getHeight() - 115) || ball_y < 10) {
dy = -dy;
bounce = true;

}
}

g.setColor(new Color(103, 104, 255));
g.drawRect(ball_x, ball_y, 100, 100);
g.setColor(new Color(255, 254, 102));
g.fillOval(ball_x, ball_y, 60, 60);


}

}

在actionPerformed中,一旦用户单击开始,我就会启动墙并触发(球)计时器。

但我无法让球定时器和墙壁定时器单独工作。墙壁计时器速度更快,并且可以完全重新绘制,但我只是希望它重新绘制墙壁而不是球。

最佳答案

照常添加您的监听器(Maus 扩展了 MouseMotionAdapter),无需任何其他线程。 Event Dispather Thread用于处理鼠标事件。

使用javax.swing.Timer和任何所需的延迟只是为了改变球的位置。

关于java - 线程中的 MouseMotionListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23320073/

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