我有 2D 多人浏览器游戏。游戏包含类似蛇的玩家和充满不同颜色块网格的世界。
目前我从服务器发送这些数据:
- if new player spawn - 关于他的所有方块和玩家的数据以及关于其他人的新生成的玩家的数据
- 如果有人改变他的移动 - 关于他的轨迹、位置和方向的数据给每个人
- 如果某些块的颜色发生了变化 - 向所有人提供有关它的数据
所以我不发送冗余数据,而是将所有数据发送给每个人。修改客户端的骗子可以看到一切!所以我需要根据他们的视口向客户发送数据。
对于类似蛇的玩家,我可能会检查玩家的最小值和最大值、X 和 Y。
如果玩家 A 靠近玩家 B,服务器将向客户端 A 发送关于玩家 B 的数据。如果玩家 A 离玩家 B 太远,服务器将从客户端 A 中移除玩家 B。只有当玩家 A 时,服务器才会发送关于玩家 B 更改的数据靠近。
主要问题
但我不确定我应该如何发送有关块的数据。恐怕我会发送太多冗余数据。
当玩家生成时,我将向他发送有关他附近块的数据。另外,当他附近的方块颜色发生变化时,我会发送给他。
如果玩家将向左移动,我将向他发送有关左侧块的数据。但我应该多久做一次?每次他行驶一个街区距离时,我应该给他发送新街区吗?
如果玩家决定去他已经去过的地方怎么办?我应该再次向他发送冗余数据吗?或者我可以检查那里的块是否发生了变化。但是我怎么能记得那个玩家已经看过一些方块呢?我可能不记得玩家看到的所有方块(方块数量太大)。这对性能不利。
我怎样才能保护我的游戏免受缩放作弊器的影响并且不降低性能?