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) 个答案