我正在编写一个基于Tile的游戏的原型来学习SDL。我的地图只是一个257x257的Tile数组,每个Tile为1x1到60x60像素(不同的缩放比例).SDL窗口的分辨率为1024x768。所以我可以显示18x13到1024 * 768的图块。
到现在为止,我尝试了2次处理。
1:从图块渲染
//for (at worst) 1024*768 Tiles
SDL_Rect Tile;
SDL_SetRenderDrawColor(gRenderer, /*some color*/ , 255);
Tile = { Tile_size * x, Tile_size * y, Tile_size, Tile_size };
SDL_RenderFillRect(gRenderer, &(Tile));
缺点:这是一种耗时的方式,如果我尝试移动地图,游戏会开始滞后。
2在游戏开始之前创建纹理
其中:
SDL_CreateRGBSurface
,SDL_FillRect
,SDL_CreateTextureFromSurface
缺点:纹理将是(257x257)(标题)x(60x60)(像素/瓦片)x(32)(位/像素)〜951 MB。并针对不同的缩放步骤提供了多个纹理,使其处理起来非常丰富。
我将不胜感激提高性能的任何技巧。
最佳答案
第一个示例仅绘制了一个填充的矩形...这不会太慢,我必须看更多才能给出更好的答案。
通常,您只需要渲染屏幕上可见的图块,而不渲染地图本身上的图块。如果使用60x60的图块,则只需使用SDL 2d绘图功能即可。当您添加不同的缩放级别时,恐怕您将无法仅使用1x1像素图块并使用相同的方法-您将尝试通过函数调用来调用每个像素!
因此,一旦添加了不同的缩放级别,您就必须弄清楚如何在屏幕上获得该缩放级别,以及无论如何对播放器意味着什么:)