我正在开发一款回合制策略游戏,其中我从PHP输出一系列数组,使用javascript在画布上动画。
考虑到我的目标是20fps(帧每秒)在javascript/canvas的php产生了大量的信息,浏览器接收,然后处理。
如何将这些php数组传递给javascript?
编辑我特别提到的数据量大约是每回合5兆字节。
我想你想要回答两个问题。
- 如何从php传递数据到javascript? 什么格式的数据应该在php和javascript之间传递?
用Q1表示:有几种技术可供选择,如果不了解您的项目,没有一种技术能够提供明显的优势。您可以使用:
- WebSockets:如果你需要低延迟,服务器和客户端之间的双向通信,或者如果你需要流数据
- AJAX:如果您需要以已知的间隔或响应事件(用户单击)请求数据
- 彗星/长轮询:如果数据在未知时间从服务器"推送"给您
关于Q2:
- JSON:易于使用,大量的支持
- MsgPack -更小的数据结构,更快的解析器
在不了解你的项目的情况下,很难选择一个最好的解决方案,但我希望这个列表能让你开始。
好吧,如果你必须发送5mb,你能做的最好的事情就是:
使用数据压缩,如gzip或gzcompress,以减少5mg负载。通常一个文件可以缩小到原始大小的20-25%(在您的情况下减少到1-1.25mb)。
也就是说,你真的应该考虑重组你需要什么数据来支持你的游戏,因为5mb的数据比一般的数据多得多!
你没有给我们任何具体的细节,所以这里有一个"稻草狗"供我们玩:假设你的游戏是国际象棋。(我知道它不是,但我们需要一些东西来集中我们的注意力)
将所有渲染移动到客户端。您发送的数据应该只发送移动("rooka6")。客户端获取该数据,并以图形方式呈现车从当前位置移动到A6上的新位置。
将游戏逻辑移动到客户端。客户端应该能够独立地对游戏条件做出反应。例如,当玩家试图将他的国王置于危险境地时,客户应该"撤销"一个动作。类似地,如果您为一个复杂的移动发送数据,如("城堡国王方"),客户端应该知道如何适当地移动国王+车,而不需要从您的数据中解释。
做一些模式识别来简化/减少发送的数据。因此,要设置棋盘上所有32个棋子的初始位置,你可以发送("Reset")而不是("移动白卢克- a1,移动白骑士- b1…等等")。
使用信号量控制游戏资源的可用性。如果你的游戏部分要求用户获取/使用一组常见的稀缺资源,那就使用信号量让用户"签出"/"签入"资源,而不是实际追踪单个资源。