1

我正在使用 Flash/Flex 为客户端和 FluorineFX(就像 FCS/FMS,除了它是用 .NET 编写的)在服务器端构建一个多人游戏。我的问题是关于 RTMP 协议上共享对象的使用和性能。

本质上,我计划同时在屏幕上显示相当多的对象,每个对象都有自己的坐标、行为、视觉效果等。连接到同一个房间的所有用户都将能够看到这些对象并与之交互。

使用包含游戏世界中所有对象的单个数组共享对象可以非常容易地非常快速地在所有客户端之间同步所有对象,但它似乎可能会导致性能沉重,并且我会失去灵活性涉及到每个单独对象的安全性。

或者,在游戏世界中为每个对象使用不同的共享对象会给我很大的灵活性,让我可以根据位置获得哪些对象(以最小化网络性能),但我担心大量具有唯一性的共享对象我最终会得到的名称,并且必须让客户端在它们四处移动时不断地连接/断开连接到不同的共享对象。

在 RTMP 方面,我不是专家,但我对处理此问题的每种方法的优缺点有所了解,并且我意识到我可以根据情况在技术上混合使用这两个概念,但我'我真的在寻找有使用远程共享对象经验的人,我可以从中收集一些知识。

有人愿意分享他们在这个话题上的经验吗?

4

3 回答 3

0

我们正在使用 Flex-WebORB-MSMQ 和 RTMP 来实现悲观并发,所以问题并不完全相同,因为我们没有经常连接/断开连接。这是我的问题,使用不同的共享对象时是否需要连接/断开连接?对不同的对象使用消息传递和不同的渠道怎么样?直觉上我会选择第二种方式,每个对象都有一个共享对象,但是如果你真的每次都需要连接/断开连接,那么我担心事情不会再顺利进行了(我想你必须测试一下) . 另一方面,如果对象不太复杂,使用一个远程对象似乎没有太大问题……当然,如果用户没有查看其中一个对象的权限,

于 2009-10-31T12:42:22.997 回答
0

我只有有限的远程共享对象经验,到目前为止我还没有使用远程对象实现任何“大”的东西,但是重新考虑 Cardoen 先生的上述评论,想象一下有一个游戏,每个房间有 1000 个房间和 100 个游戏对象。作为玩家,您一次只能在一个房间里。如果游戏被设计成所有游戏对象都在一个大 SO 中,那么显然这不是一个好的解决方案。

如果游戏真的被设计成“玩家只能在他所在的房间里看到东西”,那么你可以为每个房间设置一个 SO。但我想这归结为游戏设计。

于 2010-01-08T09:20:55.560 回答
0

我们在游戏中使用 Flash 和 FluorineFx,但共享对象对于我们的目的来说似乎有点“健谈”,因此我们选择将消息推送到连接的客户端。这使我们能够完全控制要发送的消息、消息优先级和频率。

共享对象是快速启动和运行的好方法,但您稍后可能会发现遇到性能问题。

诚然,我们的游戏是一款儿童 MMO,因此我们不会为完美同步所有客户端而大惊小怪,因此我们的多人迷你游戏也是基于回合制的。

许多这些类型的决定取决于您正在构建的游戏类型:

  • 它是基于回合的还是实时的?
  • 一个游戏的最大玩家人数是多少?
  • 客户端与服务器上处理了多少逻辑?

有一本名为ActionScript for Multiplayer Games and Virtual Worlds的好书讨论了这些问题。

于 2011-04-11T20:33:48.627 回答