-1

我用 NIO 设计了一个实时物理模拟,它是关于在多个客户端上同时(实时)移动球

目前,我通过字符串解析发送一个球的坐标,但现在我想移动多个球并希望有一些除发送字符串之外的通用机制,所以我在服务器上创建了 4 个球。

它是如何实现的,每个球的坐标对应于客户端上的同一个球(我也在客户端上创建),并且每个球都可以根据从服务器接收到的坐标移动。

这应该通过发送每个球的引用来实现,但我不知道如何使用 java 字节缓冲区和整体 NIO 来实现。

我的实现有问题,如果有人帮助我提供代码示例,那就太好了,无论如何,这对于发送模拟数据(如字符串以外的对象坐标)是通用的(如果有人做了类似的工作),但它应该实现我描述的用例。

谢谢,

吉比拉拉

PS:我可以知道Downvoting问题的原因吗?

4

2 回答 2

0

第一件事:

您需要一个对象标识来表示移动/任何东西。该对象具有与 java 中的任何其他对象一样的属性,在您的情况下,球具有坐标。可能球有形状(除了是一个带有常数 R 的完美球体),您想首先发送对象的描述或类型,然后发送其某些属性的更改。对于对象标识,您可以使用单个 long 甚至一个 UUID,但由 2 个 long(16 字节)表示

您甚至可以使用标准的 java 序列化,但我建议您不要这样做,除非您精通此事(但那时您不会问这个问题)。

虽然为了替换您自己的基于字符串的表示而制作二进制协议并不难,但对于初学者来说也不是一件容易的事。

NIO 本身具有 ByteBuffer 功能,但这不应对您表示数据的外部/流模型产生任何影响。如果您能够以某种有意义的方式将“球”表示为字节 [],则可以使用 ByteArray 实现相同的效果。

于 2011-03-20T19:22:13.057 回答
0

将 RMI 与KryoNet一起使用,然后您只需使用远程方法调用,并且调用足够高效,您不再需要担心它们。网站上有 RMI 示例供您入门。如果您需要与模拟球的实时客户端交互,它会变得有点复杂,您可能需要使用 UDP,否则您可以只发送位置。您应该尝试将信息整合到您的世界对象中的一个方法中。

于 2011-04-30T00:23:45.357 回答