我编写了一个基于Tilebased游戏的Prototyp来学习SDL.My map只是一个257x257的Tiles数组,每个Tile是1x1到60x60像素(不同的缩放).SDL窗口的分辨率为1024x768。所以我可以显示18x13到1024 * 768的瓷砖。
直到现在我尝试了2个approches。
1st:从Tiles渲染
//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));
con:这是耗时的方式,如果我试图移动地图,游戏开始滞后。
在游戏开始前第二次创建纹理
with:SDL_CreateRGBSurface
,SDL_FillRect
,SDL_CreateTextureFromSurface
con:纹理将是(257x257)(Tiles)x(60x60)(像素/平铺)x(32)(位/像素)~951 MB。并且有多个纹理用于不同的缩放步骤,以便处理大量的文本。
我很欣赏任何改善表现的提示。
答案 0 :(得分:0)
第一个例子只是绘制一个填充的矩形......这不会很慢,我必须看到更多才能给出更好的答案。
一般情况下,您只想在屏幕上呈现仅显示可见的图块而不是地图上的图块。使用60x60瓷砖,您可以使用SDL 2d绘图功能。当您添加不同的缩放级别时,我担心您将无法使用1x1像素图块并使用相同的方法 - 您将尝试通过函数调用调用每个像素!
因此,一旦你添加了不同的缩放级别,你就必须弄清楚如何在屏幕上显示它 - 以及这对玩家来说意味着什么:)