gpt4 book ai didi

Java Applet 使用 Paint 方法时遇到的问题

转载 作者:行者123 更新时间:2023-12-02 00:14:39 25 4
gpt4 key购买 nike

到目前为止,我已经让这个小程序进入工作阶段;唯一的问题是它只有在鼠标移动时才起作用;如果鼠标不移动,那么整个事情就会停止。如果移动鼠标,它会再次开始工作。

它的工作方式是通过 mouseMoved 方法调用 Paint 方法。每次移动鼠标时,它都会抛出paint方法,然后游戏继续。问题是由于没有调用 mouseMoved 方法,因此不会调用 Paint 方法,整个过程会暂停,直到鼠标移动。

我尝试过以下方法:

让paint方法是递归的,这样它就会调用自身。这样做的问题是,鼠标监听器不起作用,因为程序正忙于绘制一堆移动的东西。

我还尝试使用线程,以便 mouselistener 中断绘制方法。这不起作用,尽管这可能是因为我不明白线程是如何工作的。如果有人知道如何实现这一点,那么它似乎会起作用。

这是有问题区域的代码片段;

  public void paint( Graphics gr) {
if( Earth != null){

displayWorld(Earth);
for(int a =0; a < 100; a++){
Earth.run();
Earth.Worlds.get(2).forceMove(x,y);
}
try
{
Thread.sleep(100);
}
catch (InterruptedException ie)
{}
}

}

public void mouseMoved( MouseEvent e ) {
x = e.getX();
y = e.getY();
Graphics gr = getGraphics();
paint(gr);
}

最佳答案

我建议再看一下线程。这是游戏编程中的一个非常标准的问题(在其他编程领域也是如此)——你有一个线程,永远循环,包含你的游戏逻辑。它会更新玩家的位置、计算、生命值等,或者如果没有工作可做,它就会 hibernate 。如果完成的工作需要重新绘制小程序的图形,那么您的线程将调用 repaint(),它将重绘请求发送到事件调度线程(在每个 Java 程序中自动创建的特殊线程)。

当玩家移动鼠标或提供键盘输入时,您的事件监听器会更新程序的数据结构(并在主线程处于 sleep 状态时触发主线程)。

这些指向以前涉及 Java 游戏的 StackOverflow 问题的链接可能是一个很好的起点:

Best way to implement game loop without freezing UI thread

game loop - threads

祝你好运!

关于Java Applet 使用 Paint 方法时遇到的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12084222/

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