我正在开发一个基于回合制的策略游戏,我从PHP输出一系列数组,使用javascript在画布上进行动画制作。
鉴于我的目标是在javascript / canvas中以20 fps(每秒帧数)为目标,php正在为浏览器生成大量信息以便接收然后处理。
如何将这些php数组传递给javascript?
EDIT 我专门提到的数据量大约是每回合5兆字节。
答案 0 :(得分:1)
我认为您要回答两个问题。
就Q1而言: 有几种技术可供选择,没有一种技术可以提供明显的优势,而无需了解您的项目。你可以使用:
就第二季而言:
如果不了解更多有关您项目的信息,很难选择一个最佳解决方案,但我希望此列表可以帮助您入门。
答案 1 :(得分:1)
好的,如果你必须发送5mb,你可以做的非常非常好的事情是:
使用数据压缩(如gzip或gzcompress)来减少5毫秒的有效负载。通常,文件可以减少到原始大小的20-25%(在您的情况下降至1-1.25mb)。
那就是说,你真的应该考虑重组你需要的数据来为你的游戏提供动力,因为5mb比典型更重要!
你没有给我们任何具体的工作,所以这里是我们玩的“稻草狗”:假设你的游戏是国际象棋。 (我知道不是,但我们需要把重点放在中心)
将所有渲染移至客户端。您发送的数据应仅发送移动(“Rook-A6”)。客户端获取该数据并以图形方式将Rook从其当前位置移动到A6上的新位置。
将游戏逻辑移至客户端。客户应该能够独立地对游戏条件做出反应。例如,客户应该“撤消”玩家试图让他的国王处于危险境地的举动。同样,如果你发送一个复杂的移动数据(“城堡王方”),客户应该知道如何适当地移动国王+车,而不需要从你的数据中解释。
执行一些模式识别以简化/减少正在发送的数据。因此,要设置棋盘上所有32个棋子的初始位置,您发送(“重置”)而不是(“移动白色Rook-A1,移动白色骑士-B1 ......等等”。)
使用信号量来控制游戏资源的可用性。如果游戏的一部分要求用户获取/使用一组共同的稀缺资源,请使用信号量让用户“签出”/“登记”资源,而不是实际跟踪个人资源。