我们的游戏很简单,只是一个小家伙和一些敌人。
我从来没有编写过两台PC之间的连接,所以我在youtube上的一些关于聊天应用程序的教程中建立了我的“连接”代码。连接工作正常,但问题是程序只读取套接字的输入,但不再运行游戏。
我设法解决了这个问题,只是将其从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:抱歉我的英语不好:s
答案 0 :(得分:1)
readObject
阻塞直到输入可用,然后在输入到达时返回输入。您需要创建一个新线程来读取输入并将输入提供给游戏的其他部分。
要将信息传递给游戏,您可能希望在Server
和Client
类中创建不同的方法来处理不同的消息。您可以使用switch
或if else if
根据对象中的字段或对象类型(使用instanceof
)来决定使用哪种方法。