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

时间:2011-03-24 21:21:45

标签: java network-programming network-protocols nio

我经常在网络游戏/模拟领域“发送游戏状态或模拟状态”这句话,我的问题源于此,我真的需要知道如何?

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

可能的情况:以简单的球模拟为例,服务器正在移动多个球,并且应该将每个球的坐标发送给客户端以进行绘图和更新模拟,并且每个球应该根据其从服务器接收的坐标移动。

感谢,

jibbylala

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

1 个答案:

答案 0 :(得分:1)

在快节奏的动作游戏中,动态对象的状态在结构中不断发送。按状态我的意思是它通常是位置和旋转。根据模型的体系结构,它可以是服务器不断推送状态,或者在状态发生时发送状态变化。更常见的是第一个。当在一段时间内没有收到状态时,游戏滞后发生。状态还可以具有诸如速度,加速度等参数,这实际上取决于游戏以及您想要如何处理游戏事件。让我们说我们正在编写简单的2D游戏,表面上有飞船,然后状态可能是java中的一个简单类:

class ShipState{ 
      public float x; 
      public float y; 
      public float angle;
}

游戏中的网络代码负责运输这些结构。游戏通常有自己的协议建立在TCP / IP和UDP之上,以处理所有事情,因为在真实游戏中有很多不同类型的信息,而不仅仅是物理状态。如果你认真对待你的项目,你应该真正研究网络库。我强烈怀疑有什么好东西,因为JAVA在这个前沿并不是很受欢迎。单个谷歌请求提出了这个Kryo库,看起来还不错。您也可以查看netty,这是一个非常可靠的通用网络库。如果我要用Java编写游戏的网络代码,我会去挖掘用C / C ++编写的开源游戏网络库,例如Enet来获得一些想法。

在问题的底部,关于服务器上的球模拟,它就像服务器发送球坐标和接收它们的客户一样简单。如果您不确定如何完成,可能需要查看these tutorials。和其他一般的Java网络教程。祝好运!