首页 > 解决方案 > Java - 具有 thread.sleep 的多个线程的不同绘制

问题描述

我是新手,我正在尝试制作游戏,但我不明白如何使用不同线程的不同油漆的 repaint() 。一个线程有 thread.sleep 而另一个没有。

这是我的一段代码:

游戏面板:

public class GamePanel extends JPanel implements MouseListener, MouseMotionListener{

EnemyEngine enemyE = new EnemyEngine();

public GamePanel() {

    new Thread(new Runnable() {

        @Override
        public void run() {
            while(true){            
                repaint();
            }
        }
    }).start();

    new Thread(new Runnable() {

        @Override
        public void run() {
            while(true){            
                enemyE.update();
                enemyE.repaint();

                try { 
                    Thread.sleep(1000/10);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    }).start();
}
public void paintComponent(Graphics g) {
    // board painting
}

}

敌人引擎:

public class EnemyEngine extends JPanel{

Vector<Enemy> enemyVect = new Vector<>();

Random rand = new Random();

public void paintComponent(Graphics g){
    for (Enemy enemy : enemyVect) {
        enemy.render(g);
    }
}

public void update() { 
    for (Enemy enemy : enemyVect) {
        enemy.move();
    }
}

}

我已经在互联网上搜索但它仍然没有用......或者我可能是愚蠢的:/

请帮我前辈

标签: javamultithreadingswingrepaintthread-sleep

解决方案


我不清楚你关于重绘的问题?如果你想立即刷新ui,为什么不使用paintImmediately(0, 0, getWidth(), getHeight());


推荐阅读