【问题标题】:Best way to communicate server-generated map to client将服务器生成的地图传达给客户端的最佳方式
【发布时间】:2017-12-23 19:27:38
【问题描述】:

我从 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


    【解决方案1】:

    Lance 将仅在其网络方案的数据发生更改时广播游戏对象。当新用户连接时,Lance 还将广播所有游戏对象。

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

    另一种方法是使用socket.emit 方法将地图数据直接发送给用户,如以下堆栈溢出问题所述:Sending "secret" data to individual players in Lance Game。

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-10
      相关资源
      最近更新 更多