我正在为使用C++的游戏实现图块引擎。当前,游戏分为 map ,每个 map 都有一个2D的精灵网格,每个网格代表一个图块。
我正在编写一个系统,其中如果有几幅 map 相邻,您可以从一张走到另一张。
游戏开始时,所有的 map 都被实例化,但是被“卸载”,即精灵对象不在内存中。当我足够靠近相邻的 map 时,基本上可以通过以下操作将 map 精灵“加载”到内存中:
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;
}
}
当我离 map 太远时,它们会以相同的方式被销毁。
对于50x50的32x32像素的精灵图,加载或卸载大约需要1秒钟的时间,这需要1秒钟的时间。我的问题是:即使使用完全不同的机制,动态加载/卸载 map 的更有效方法是什么?谢谢
PS:我正在使用SFML作为图形库,但是我不确定这会改变任何东西
最佳答案
改善延迟的另一种可能性,但会增加所需的总操作数:
当您距离 map “太近”或“太远”时,不必等待,而是将 map 存储在玩家周围更大的正方形上。如果 map 是50x50,则存储150x150],但仅显示50x50。现在,每一步-计算新的150x150 map ,每步需要150个销毁行动和150个构建行动。
这样,您实际上将需要多次计算和构建/销毁元素!但是,由于您不需要等待0.3秒来构建2,500个元素,因此延迟会有所改善,因为您始终只需要一小部分:150 * 2 = 300个元素。
关于c++ - 在 “tile engine”中动态加载 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7785815/