在“平铺引擎”中动态加载贴图 我用C++实现了游戏引擎。目前游戏分为地图,每张地图都有一个2D精灵网格,每个精灵代表一块瓷砖

在“平铺引擎”中动态加载贴图 我用C++实现了游戏引擎。目前游戏分为地图,每张地图都有一个2D精灵网格,每个精灵代表一块瓷砖,c++,algorithm,graphics,sfml,C++,Algorithm,Graphics,Sfml,我正在编写一个系统,如果几个地图是相邻的,你可以从一个走到另一个。 在游戏启动时,所有地图都会实例化,但会被卸载(即精灵对象不在内存中)。当我与相邻地图足够接近时,地图精灵基本上通过以下操作加载到内存中: for(int i=0; i < sizeX; i++) { for(int j=0; j < sizeY; j++) { Tile *tile_ptr = new Tile(tileset, tilesId[i][j], i + offsetX, j +

我正在编写一个系统,如果几个地图是相邻的,你可以从一个走到另一个。 在游戏启动时,所有地图都会实例化,但会被卸载(即精灵对象不在内存中)。当我与相邻地图足够接近时,地图精灵基本上通过以下操作加载到内存中:

for(int i=0; i < sizeX; i++) {
    for(int j=0; j < sizeY; j++) {
        Tile *tile_ptr = new Tile(tileset, tilesId[i][j], i + offsetX, j + offsetY);
        tilesMap[i][j] = tile_ptr;
    }
}
当我离地图太远的时候,它们也会以同样的方式被摧毁

对于32x32像素的50x50精灵贴图,加载或卸载大约需要0.3秒,这是在1帧内完成的。我的问题是:即使使用完全不同的机制,动态加载/卸载地图的更有效方法是什么?谢谢


PS:我正在使用SFML作为图形库,但我不确定这是否会改变任何事情

改善延迟的不同可能性,但会增加所需的操作总数: 当您离地图“太近”或“太远”时,不要等待,而是将玩家周围较大正方形的地图存储在内存中[即,如果地图为50x50,则存储150x150],但仅显示50x50。现在,每一步——计算新的150x150地图,每一步需要150次摧毁行动和150次建造行动


通过这样做,您实际上需要更多次计算和构建/销毁元素!但是,延迟会有所改善,因为构建2500个元素不需要等待0.3秒,因为您总是需要一小部分:150*2=300个元素。

我认为这是学习多线程和异步调用的最佳时机。 如果你是新手,这看起来可能很复杂,但这是一项非常有用的技能。 它仍然需要0.3秒才能加载好,实际上要多一点,但游戏不会冻结。 大多数游戏都是这样做的。你可以在C++中搜索各种方法来做它。