2013-07-22 68 views
2

我正在考虑编写基于Dart的浏览器游戏。我喜欢从客户端呈现和事件处理代码中分离核心游戏逻辑。这样我可以在多人游戏系统中的服务器Dart VM端运行相同的逻辑代码。这就是今天许多游戏(例如Quake系列):即使玩单人游戏,你也拥有本地服务器。通过MessageBox输入数据?

  • 事件处理和主浏览器线程渲染运行(渲染循环由requestAnimationFrame触发)
  • 游戏逻辑在一个单独的Isolate(实际上在浏览器中WebWorker运行:

    在我的情况

    所以)

  • 对于沟通我使用MessageBoxes这是有点麻烦设置和管理,但它是可能的。如果逻辑在服务器上运行,稍后可以与WebSocket交换。

逻辑分离物将消息发送至约游戏事件的主要线环(如游戏对象的状态被更新,地图改变等),以及主线程帖客户端事件(键按压基于玩家运动,命令)逻辑。

我想知道什么是通过这个层管理消息的最好方法。从MessageBox的文档:“消息的内容可以是:原始值(null,num,bool,double,String),IsolateSinks的实例以及其元素是其中任何元素的列表和映射。”这些对于简单的数据传输都很好,但如果我喜欢传递整个数据bean呢?我发现的唯一解决方案是JSON序列化,可以用JsonObject相对轻松地完成。现在我们有一个可以通过MessageBox/WebSocket传递的字符串。

我想知道这个设计有多好?对连接上的每个数据都会发生JSON序列化和反序列化。我很担心这引入的开销,这个频道将会被使用很多。

有什么我可以做的,以改善这一点?

回答

1

一对夫妇的可能性:

  1. 是否发送一个类型数据列表的工作? VM应该能够在分离之间传输类型化数据列表。不知道dart2js如何处理事情。
  2. 把你的二进制数据和base64编码成一个字符串进行传输。这将比纯二进制数据(1.2倍空间增加)稍微小一些,但可以工作。

约翰