将服务器生成的映射传递给客户端的最佳方法

时间:2017-12-22 23:05:38

标签: lance

我开始使用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;
    }
}

地图是一个整数的双数组,可能非常大,所以我想避免将它作为netscheme的一部分实现(我认为我在这里没有正确做到),因为它不需要经常更新。我还想在游戏世界中对它进行引用,以使其与实际改变位置的对象分开。

这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:2)

只有当他们的netscheme数据发生变化时,Lance才会播放游戏对象。当新用户连接时,Lance还会播放所有游戏对象。

在你的情况下,这意味着如果地图每隔几分钟才会改变一次,那么你应该把它留作游戏对象,依靠Lance来检测变化并在必要时进行广播。

另一种方法是使用socket.emit方法直接向用户发送Map数据,如此堆栈溢出问题所述:Sending "secret" data to individual players in Lance Game