有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理多播放器线程和重新绘制

我目前正在开发一款java bomber man游戏,该游戏运行良好,但我确实有一个并发修改异常,该异常会反复抛出
在我的游戏中,我有两个玩家,每个人都有自己的线程,使用计时器以恒定的60fps运行(thread.run())。我试着在每个游戏者运行方法的末尾,一次又一次地重新绘制线程

方法1:

public void loop() {
    if (!gameover) {
        player1_thread.run(); //run player 1 thread
        player2_thread.run(); //run player 2 thread
        gui.repaint() //repaint panel
    }
} 

方法2:

public class Player extends Character { //Character implements Runnable
...
    @Override
    public void run() {
        play();
        ...
        game.render();
    }
}

这两种方法都会按预期抛出并发修改,因此除了执行以下操作外,我如何避免错误:

player1.run(); //call the run method of each player class
player2.run();

这给了player1一个优势

编辑:

方法4:

import java.util.Timer

public class Player extends Character { //Character implements Runnable
    private Timer gameTimer

    @Ovveride
    public void run() {
        gameTimer.scheduleAtFixedRate(new TimerTask() {

            @Override
            public void run() {
                play();
                ...
                game.render();
            }

        }, 0, 1000/60);
    }
}

public class Game extends AbstractGame {

    private void init() {
        ...
        Thread player1_Thread = new Thread(player1);
        Thread player2_Thread = new Thread(player2);
        gui = new GameGraphics(this); //subclass of JPanel
        player1_thread.start();
        player2_thread.start();
    }

    /* this method is called at a constant 60fps(like the player timer) in the main game timer in my abstract game class */
    public void gameLoop(){
        if(!gameover){
            render();
        ...
        }
    }
}

这也引发了例外


共 (0) 个答案