将服务器生成的地图传达给客户端的最佳方式

Best way to communicate server-generated map to client

我从 lance-gg 开始,正在构建一个每隔几分钟生成一个新游戏地图的游戏。客户端游戏引擎需要接收生成的地图。目前我正在将地图注册为可序列化对象,并在服务器启动时向游戏世界添加一个新实例。

class Map extends serialize.DynamicObject {
    constructor(id, width, height) {
        super(id);
        this.class = Map;
        this.width = width;
        this.height = height;
        this.netScheme = {
            tiles: { type: "CLASSINSTANCE" },
        };
    }
    randomTiles() {
        const tiles = [];
        _.forEach(_.range(this.width), (x) => {
            tiles[x] = [];
            _.forEach(_.range(this.height), (y) => {
                tiles[x][y] = _.random(0, 1);
            });
        });
        return tiles;
    }
}

该映射是一个双精度整数数组,可能非常大,所以我想避免将其作为网络方案的一部分实现(无论如何我认为我在这里做的不正确),因为它没有需要经常更新。我还想在游戏世界中保留对它的引用,以使其与实际改变位置的对象分开。

最好的方法是什么?

Lance 只会在网络方案数据发生变化时广播游戏对象。当新用户连接时,Lance 还将广播所有游戏对象。

在您的情况下,这意味着如果地图只是每隔几分钟更改一次,那么您应该可以将其保留为游戏对象,并依靠 Lance 检测更改并在必要时进行广播。

另一种方法是使用 socket.emit 方法将地图数据直接发送给用户,如堆栈溢出问题中所述:.