2

我正在开发一个基于回合的策略游戏,在其中我从 PHP 输出一系列数组,以使用 javascript 在画布中进行动画处理。

鉴于我的目标是 javascript/canvas 中的 20 fps(每秒帧数),php 正在为浏览器生成大量信息以接收并处理。

如何将这些 php 数组传递给 javascript?

编辑我具体指的数据量约为每转 5 兆字节。

4

2 回答 2

1

我认为您试图回答两个问题。

  1. 如何将数据从 php 传递到 javascript?
  2. php和javascript之间应该以什么格式传递数据?

就 Q1 而言:有多种技术可供选择,如果不了解您的项目,则没有一种技术具有明显的优势。你可以使用:

  • WebSockets:如果您需要低延迟,服务器和客户端之间的双向通信,或者如果您需要流式传输数据
  • AJAX:如果您需要以已知间隔请求数据或响应事件(用户点击)
  • Comet/长轮询:如果数据在未知时间从服务器“推送”给您

就第二季度而言:

  • JSON:易于使用,大量支持
  • MsgPack - 更小的数据结构,更快的解析器

在不了解您的项目的情况下很难选择一个最佳解决方案,但我希望这份清单可以帮助您入门。

于 2013-03-09T16:08:30.470 回答
1

好的,如果您必须发送 5mb,那么您可以做的非常非常好的事情是:

使用gzip 或 gzcompress 等数据压缩来减少 5mg 有效负载。通常,文件可以减少到原始大小的 20-25% 左右(在您的情况下可以减少到 1-1.25mb)。

就是说,您确实应该考虑重组为游戏提供动力所需的数据,因为 5mb 远远超过典型!

你没有给我们任何具体的工作,所以这里有一个“稻草狗”供我们玩:假设你的游戏是国际象棋。(我知道不是,但我们需要一些东西来集中我们的注意力)

将所有渲染移至客户端。您发送的数据应该只发送移动(“Rook-A6”)。客户端获取该数据并以图形方式渲染 Rook 从其当前位置移动到 A6 上的新位置。

将游戏逻辑移至客户端。客户端应该能够独立地对游戏条件做出反应。例如,客户端应该“撤消”玩家试图将他的国王置于危险之中的举动。同样,如果您为复杂的移动(例如“城堡王侧”)发送数据,客户端应该知道如何正确移动王+车,而无需从您的数据中进行解释。

做一些模式识别来简化/减少发送的数据。因此,要设置棋盘上所有 32 个棋子的初始位置,您发送 (“Reset”) 而不是 (“移动白车-A1,移动白骑士-B1……等等”)。

使用信号量来控制游戏资源的可用性。如果你的游戏的一部分要求用户获取/使用一组共同的稀缺资源,请使用信号量让用户“签出”/“签入”资源,而不是实际跟踪单个资源。

于 2013-03-09T16:32:35.837 回答