학교에서 제 친구와 저는 자바로 2D 플랫폼 게임을 만들고 있습니다. 게임 자체는 잘 작동하지만 멀티 플레이어 부분에 약간의 문제가 있습니다.멀티 플레이어 Java 2D 플랫폼 게임 : ObjectInputStream.readObject()가 프로그램을 중지합니까?
우리 게임은 단순한 것, 작은 녀석과 일부 적입니다.
채팅 앱에 관한 YouTube의 튜토리얼에 기반하여 "연결"코드를 기반으로 한 2 대의 PC 간의 연결을 프로그래밍 한적이 없습니다. 연결은 잘 작동하지만 문제는 프로그램이 소켓에서 입력을 읽지 만 더 이상 게임을 실행하지 않는다는 것입니다.
나는 while(true)
루프에서 꺼내는 것으로 해결할 수 있었지만 지금은 지금 해결할 수없는 또 다른 문제가 있습니다.
멀티 플레이어 게임을 시작할 때 게임 (서버)을 만들지 또는 게임 (클라이언트)에 참여 시킬지를 선택할 수 있습니다.
게임을 만들면 시작하기 전에 연결 (클라이언트) 연결을 기다립니다. 그러나 이제는 게임 전체가 시작될 때 "멈추었습니다". 실제로 실제로 붙어 있지는 않습니다. 당신이 서버이고, 당신의 친구가 당신의 서버에 클라이언트로 접속한다고 가정하십시오. 그는 게임에 참여하고 두 컴퓨터에서 게임이 시작되지만 메뉴에 머물러 있습니다. 친구 (클라이언트)가 버튼을 클릭 할 때만 화면 (서버)의 게임이 이동하고 (친구가 버튼을 누르면 게임이 조금 움직입니다) 버튼을 누르면 친구 게임이 이동합니다. 서버와 클라이언트가 버튼 (왼쪽, 오른쪽, 점프, 불 ...)에 손가락을 올려 놓으면 게임이 완벽하게 작동하지만 물론 좋지 않습니다.
나는 문제가 코드이 줄을 생각 :
if(ServerState.server == true){
try {
Server.clientMessage = (String) Server.serverInput.readObject();
System.out.println(Server.clientMessage);
}
catch (ClassNotFoundException e) {
System.out.println("Data type not found");
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
if(ClientState.client == true){
try {
Client.serverMessage = (String) Client.clientInput.readObject();
System.out.println(Client.serverMessage);
}
catch(ClassNotFoundException e){
System.out.println("Data type not found");
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}
serverInput
및 clientInput
모두 ObjectInputStreams
있습니다.
변수 serverState.server
및 ClientState.client
은 서버 또는 클라이언트인지 확인하기 위해 단지 booleans
입니다.
이 코드는 "온라인 레벨"코드로 구현됩니다.
난 그냥이 코드 게임 작동하지만 "connectedPlayer는"움직이지 않는 코멘트 경우
내 질문은 (서버/클라이언트는 클라이언트/서버에서 어떤 정보를 얻을하지 않습니다는) : 코드 줄을합니까 :
입력에 대한Server.clientMessage = (String) Server.serverInput.readObject();
대기, 그는이 프로그램이 계속 될 수 있음을 얻을 때? 그리고 입력이 없으면 전체 프로그램이 중단됩니까? 설명이 명확하면이 문제를 해결하기위한 아이디어.
미리 감사드립니다.
PS : 내 나쁜 영어 죄송합니다 : 입력을 사용할 수있을 때까지이 도착했을 때의
학교에서 나는 대학이 의미하는 바를 모르겠다. 하지만 어떤 종류의 게임이 학생에게 너무 어렵다고 생각하지는 않습니다. 게임이 작동한다는 증거가 있습니다. 그 부분에서 경험이 0이므로 멀티 플레이어 부분에 문제가 있습니다. – Allinone51
이 직렬화 유형 대신 ** KryoNet **을 사용해보십시오. http://stackoverflow.com/a/24452428/2413303 – EpicPandaForce
그래, 고마워, 내가 그걸 봐야 겠어 – Allinone51