Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/185.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的实时套接字_Java_Android_Sockets_Real Time_Multiplayer - Fatal编程技术网

java中的实时套接字

java中的实时套接字,java,android,sockets,real-time,multiplayer,Java,Android,Sockets,Real Time,Multiplayer,我正在尝试为Android编写多人游戏,java后端使用sockets,但我不知道如何做一些事情 比如说,我必须和球员们打交道。第一个玩家按下“向上”按钮,他的化身向上移动。我怎样才能告诉所有其他玩家呢 我可以发送消息,那个有ID的用户把坐标改成了新的X和Y,但我需要在他移动时每毫秒做一次。是这样吗 或者我可以向那个用户发送一条消息,在这个消息之后,用户释放了这个向上按钮。使用这两个事件之间的时差和移动速度,我可以计算出用户的新坐标,但在这种情况下会出现延迟问题(时差计算不够精确) 我如何做到这

我正在尝试为Android编写多人游戏,java后端使用sockets,但我不知道如何做一些事情

比如说,我必须和球员们打交道。第一个玩家按下“向上”按钮,他的化身向上移动。我怎样才能告诉所有其他玩家呢

我可以发送消息,那个有ID的用户把坐标改成了新的X和Y,但我需要在他移动时每毫秒做一次。是这样吗

或者我可以向那个用户发送一条消息,在这个消息之后,用户释放了这个向上按钮。使用这两个事件之间的时差和移动速度,我可以计算出用户的新坐标,但在这种情况下会出现延迟问题(时差计算不够精确)
我如何做到这一点?

你可以用很多方法做到这一点,所有这些都会有你已经发现的缺点。我想没有“最好”的方法可以做到这一点

游戏的一种常见方式是使用“游戏服务器”。服务器接收来自所有客户端的输入,并决定结果状态

例如,客户机可以只发送按键,服务器告诉他们自己的位置以及需要绘制的其他客户机的位置。客户端在本地执行相同的计算,并在等待服务器确认时显示此状态。但这只是一个预测

当它滞后时,你可以在很多游戏中观察到自己在位置之间跳跃,因为实际服务器计算的位置和你的预测不同步

服务器端状态决策的另一个优点是客户端不能那么容易地欺骗。要防止每一次欺骗,这不是万无一失的办法。例如,瞄准机器人只是通过为他们移动鼠标来模拟一个完全瞄准的用户,这基本上是检测不到的。另一方面,地图黑客/墙黑客(任何你能看到你看不到的东西的地方)可以通过不告诉客户当前看不见的东西来防止。只有服务器需要知道完整状态

服务器方法也可以在没有专用游戏服务器的情况下使用。相反,其中一个客户端将扮演服务器的角色,并决定游戏状态。在某些游戏中,如果原始主机退出,这种责任甚至可以在客户端之间切换。但是,如果发生这种情况,平稳的移交是相当棘手的

若并没有服务器,并且所有客户机都同样负责,那个么您必须考虑定义哪个客户机负责验证哪个操作的模式。例如,在一个射手身上,a朝某个方向射击,认为B还在,但B已经移动了一点,现在a认为“B被击中了”,B认为“射偏了”——>应该由一次射击或被击中的射击决定发生了什么

具有多个决策方的模式可能不适用于所有游戏,这是一项非常复杂的任务。不只是为了游戏,而是

Java和套接字在这里只是工具。实际的问题是,你应该用笔和纸思考一个适合你的场景的模式


关于每毫秒的坐标:您还可以发送诸如“我将在时间Z时在X点,Y点”之类的消息,其他客户端插入该玩家的路径,这样您就不必传输每个位置。

您可以通过多种方式进行传输,所有这些都会有您已经发现的缺点。我想没有“最好”的方法可以做到这一点

游戏的一种常见方式是使用“游戏服务器”。服务器接收来自所有客户端的输入,并决定结果状态

例如,客户机可以只发送按键,服务器告诉他们自己的位置以及需要绘制的其他客户机的位置。客户端在本地执行相同的计算,并在等待服务器确认时显示此状态。但这只是一个预测

当它滞后时,你可以在很多游戏中观察到自己在位置之间跳跃,因为实际服务器计算的位置和你的预测不同步

服务器端状态决策的另一个优点是客户端不能那么容易地欺骗。要防止每一次欺骗,这不是万无一失的办法。例如,瞄准机器人只是通过为他们移动鼠标来模拟一个完全瞄准的用户,这基本上是检测不到的。另一方面,地图黑客/墙黑客(任何你能看到你看不到的东西的地方)可以通过不告诉客户当前看不见的东西来防止。只有服务器需要知道完整状态

服务器方法也可以在没有专用游戏服务器的情况下使用。相反,其中一个客户端将扮演服务器的角色,并决定游戏状态。在某些游戏中,如果原始主机退出,这种责任甚至可以在客户端之间切换。但是,如果发生这种情况,平稳的移交是相当棘手的

若并没有服务器,并且所有客户机都同样负责,那个么您必须考虑定义哪个客户机负责验证哪个操作的模式。例如,在一个射手身上,a朝某个方向射击,认为B还在,但B已经移动了一点,现在a认为“B被击中了”,B认为“射偏了”——>应该由一次射击或被击中的射击决定发生了什么

具有多个决策方的模式可能不适用于所有游戏,这是一项非常复杂的任务。不只是为了游戏,而是

Java和套接字在这里只是工具。实际的问题是,你应该用笔和纸思考一个适合你的场景的模式

关于每毫秒的坐标:你也可以发送类似“我将在时间Z的X点,Y点”的消息,其他客户端插入该玩家的路径,这样你就不必传输每个位置