我开始使用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的一部分实现(我认为我在这里没有正确做到),因为它不需要经常更新。我还想在游戏世界中对它进行引用,以使其与实际改变位置的对象分开。
这样做的最佳方式是什么?
答案 0 :(得分:2)
在你的情况下,这意味着如果地图每隔几分钟才会改变一次,那么你应该把它留作游戏对象,依靠Lance来检测变化并在必要时进行广播。
另一种方法是使用socket.emit
方法直接向用户发送Map数据,如此堆栈溢出问题所述:Sending "secret" data to individual players in Lance Game。