0
서버 인스턴스에 게임 인스턴스를 생성하는 createGame
메서드가 있습니다. 내가 원하는 것은 differents 클라이언트를위한 게임의 또 다른 인스턴스를 만드는 것이지만, 게임의 또 다른 인스턴스를 만들면 생성 된 첫 번째 게임이 더 이상 작동하지 않습니다. 각자가 다른 스레드에있는 경우,복수 게임 인스턴스
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();
}
} 코드에서
누락 된 코드는 유감이지만, 여기에 게시하는 것은 너무 어려울 것입니다. 그러나 나는 약간의 변경을했기 때문에 코드를 편집 하겠지만 문제는 동일합니다. 아시다시피 컨트롤러의 arraylist는 지워지지 않고 모든 게임마다 다른 컨트롤러를 사용합니다. playerList와 관련하여, 엘리먼트는 GameThread 내의 새로운 목록에 복사됩니다. 코드를 청소하기 전에 코드에 표시합니다. 디버거에서 두 GameThread가 다른 playerList를 가지고 있는지 확인했습니다. 내가 얻지 못하는 것이 있습니다. –
두 번째 게임을 만든 후 첫 번째 게임에서 무슨 일이 일어 났습니까? 그만 해요? 그것은 추락 하는가? secong 게임 woks 있습니까? –
두 번째 게임이 작동합니다. 첫 번째 gameThread는 디버거에서 "실행 중"으로 설정되어 있지만 입력 할 수는 없습니다. –