Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.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
使用javaNIO发送游戏/模拟状态的可能方式有哪些?_Java_Network Programming_Network Protocols_Nio - Fatal编程技术网

使用javaNIO发送游戏/模拟状态的可能方式有哪些?

使用javaNIO发送游戏/模拟状态的可能方式有哪些?,java,network-programming,network-protocols,nio,Java,Network Programming,Network Protocols,Nio,我经常在网络游戏/模拟领域听到“发送游戏状态或模拟状态”这句话,我的问题就是由此产生的,我真的需要知道怎么做 我正在进行实时网络物理模拟,我的问题只是: *模拟状态如何从服务器传输到客户端*?(最小模拟状态为模拟实体的坐标X、Y=)) 可能的场景:以简单球模拟为例,服务器正在移动多个球,并应将每个球的坐标发送给客户端以绘制和更新模拟,每个球应根据从服务器接收到的坐标移动 谢谢 吉比拉拉 注:请不要提及任何基于字符串的解决方案,我正在寻找适用于不同物理模拟的通用机制。在快节奏动作游戏中,动态对象的

我经常在网络游戏/模拟领域听到“发送游戏状态或模拟状态”这句话,我的问题就是由此产生的,我真的需要知道怎么做

我正在进行实时网络物理模拟,我的问题只是: *模拟状态如何从服务器传输到客户端*?(最小模拟状态为模拟实体的坐标X、Y=))

可能的场景:以简单球模拟为例,服务器正在移动多个球,并应将每个球的坐标发送给客户端以绘制和更新模拟,每个球应根据从服务器接收到的坐标移动

谢谢

吉比拉拉


注:请不要提及任何基于字符串的解决方案,我正在寻找适用于不同物理模拟的通用机制。

在快节奏动作游戏中,动态对象的状态在结构中不断发送。我所说的状态通常是位置和旋转。根据模型的体系结构,它可以是服务器不断推送状态,或者在状态发生变化时发送状态变化。通常是第一个。当状态在一段时间内未被接收时,游戏延迟发生。状态也可以有参数,如速度、加速度等。这实际上取决于游戏以及您希望如何处理游戏事件。假设我们正在编写一个简单的2D游戏,游戏中的飞船在水面上飞行,那么状态可以是java中的一个简单类,如:

class ShipState{ 
      public float x; 
      public float y; 
      public float angle;
}
游戏中的网络代码负责传输这些结构。游戏通常在TCP/IP和UDP的基础上建立自己的协议来处理一切,因为在真实的游戏中有很多不同类型的信息是双向的,而不仅仅是物理状态。如果你对你的项目很认真,你应该认真研究网络库。我强烈怀疑是否真的有什么好东西,因为JAVA在这一领域并不流行。谷歌的一个请求就带来了这个看起来相当不错的库。您还可以查看,这是一个非常可靠的通用网络库。如果我要用Java为游戏编写一个网络代码,我只需要去挖掘用C/C++编写的开源游戏网络库,以便获得一些想法


关于服务器上的球模拟,问题的本质是服务器发送球坐标,客户端接收球坐标。如果你不确定它是如何完成的,你可能想看看。和其他通用Java网络教程。祝你好运

在快节奏动作游戏中,动态对象的状态在结构中不断发送。我所说的状态通常是位置和旋转。根据模型的体系结构,它可以是服务器不断推送状态,或者在状态发生变化时发送状态变化。通常是第一个。当状态在一段时间内未被接收时,游戏延迟发生。状态也可以有参数,如速度、加速度等。这实际上取决于游戏以及您希望如何处理游戏事件。假设我们正在编写一个简单的2D游戏,游戏中的飞船在水面上飞行,那么状态可以是java中的一个简单类,如:

class ShipState{ 
      public float x; 
      public float y; 
      public float angle;
}
游戏中的网络代码负责传输这些结构。游戏通常在TCP/IP和UDP的基础上建立自己的协议来处理一切,因为在真实的游戏中有很多不同类型的信息是双向的,而不仅仅是物理状态。如果你对你的项目很认真,你应该认真研究网络库。我强烈怀疑是否真的有什么好东西,因为JAVA在这一领域并不流行。谷歌的一个请求就带来了这个看起来相当不错的库。您还可以查看,这是一个非常可靠的通用网络库。如果我要用Java为游戏编写一个网络代码,我只需要去挖掘用C/C++编写的开源游戏网络库,以便获得一些想法


关于服务器上的球模拟,问题的本质是服务器发送球坐标,客户端接收球坐标。如果你不确定它是如何完成的,你可能想看看。和其他通用Java网络教程。祝你好运

我想指出的是,作为一个物理模拟,你也可以提供双倍的速度;双矢量;双yVector以表示其当前速度(速度和方向)。这将减少服务器所需状态更新的数量。x和y可以根据速度进行更新,所以你只需要在速度变化时进行更新。m0s写道:“游戏中的网络代码负责传输这些结构”,不,这不是我的问题,。。。我知道游戏中的网络代码要小心,但问题是,如果有人不想使用某个库=)@Static Void Main,该怎么做?这部分的答案在教程的最后一个链接中。还有你怎么有点暧昧。你可以问“如何通过TCP/IP发送数据?”或者“如何用Java构建一个基本的客户机/服务器程序?”或者“如何设计一个低延迟的游戏网络协议?”我并不是说很无聊,我只是真的不明白你到底在做什么。为了回答你在评论中提出的问题,如果你不想使用某个库,你必须编写自己的库:D这不是一项非常简单的任务。我希望这篇文章能帮助你了解我的意图:@Static Void Main是的,使用字符串,因为这不是一个很好的主意。从你在coderanch.com上的解释中我了解到,你的引擎正在运行,并且你已经建立了基本的网络连接。现在您可以通过流发送对象了,请检查这个问题:答案正是通过网络发送状态对象所需要的。您的客户机需要在模拟的主循环中调度数据包,并更新数据包的状态