我在服务器上有一个方法createGame
,它创建一个游戏实例。我想要的是为不同的客户创建另一个游戏实例,但是当我创建另一个游戏实例时,创建的第一个游戏不再有效。
以下是代码:
private void createGame(){
gameThread.add(new GameThread(playerList, controllers.get(controllerNumber), controllers.get(controllerNumber)));
gameThread.get(gameNumber).start();
//just to shift the array of game
gameNumber++;
//shift the array of controller
controllerNumber++;
clientCounter = 0;
playerList.clear();
controllers.add(new ControllerServerSide());
}
为什么我不能同时玩两个游戏,如果每个游戏都在不同的主题上?
编辑:
GameThread
public class GameThread extends Thread{
private Settings settings;
private Game game;
private static int gamesActive = 0;
public GameThread(ArrayList<Player> playerList, Observer observer, ObservableInput controllerServer){
ArrayList<Player> newPlayerList = new ArrayList<>();
int size = playerList.size();
for(int i = 0; i < size; i++){
newPlayerList.add(playerList.remove(0));
}
settings = new Settings("src/main/java/it/polimi/ingsw/ps05/gamelogic/mappa.xml", newPlayerList);
game = new Game(settings, gamesActive++, observer, controllerServer);
game.init();
}
public void run(){
game.play();
}
}
答案 0 :(得分:0)
从您的代码中不清楚成员是什么或他们做了什么......很难理解您的代码的作用。 但我会试一试:
尝试查看其中一个新线程是否更改与旧游戏线程相同的对象。 或者 - 我认为这可能是问题 - 你清除了两个游戏使用的玩家和控制器的阵列/列表......所以第一个游戏工作正常,但第二个游戏清理那些列表/数组并解释其中的内容 - 所以你的第一场比赛停止工作..检查出来。
答案 1 :(得分:0)
private void createGame(){
gameThread.add(new GameThread(playerList, controllers.get(controllerNumber), controllers.get(controllerNumber)));
gameThread.get(gameNumber).start();
//just to shift the array of game
gameNumber++;
//shift the array of controller
controllerNumber++;
clientCounter = 0;
playerList.clear();
controllers.add(new ControllerServerSide());