巨大的SDL_Textures - 内存不足

时间:2015-01-11 16:38:06

标签: c++ sdl sdl-2

我编写了一个基于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_CreateRGBSurfaceSDL_FillRectSDL_CreateTextureFromSurface

con:纹理将是(257x257)(Tiles)x(60x60)(像素/平铺)x(32)(位/像素)~951 MB。并且有多个纹理用于​​不同的缩放步骤,以便处理大量的文本。

我很欣赏任何改善表现的提示。

1 个答案:

答案 0 :(得分:0)

第一个例子只是绘制一个填充的矩形......这不会很慢,我必须看到更多才能给出更好的答案。

一般情况下,您只想在屏幕上呈现仅显示可见的图块而不是地图上的图块。使用60x60瓷砖,您可以使用SDL 2d绘图功能。当您添加不同的缩放级别时,我担心您将无法使用1x1像素图块并使用相同的方法 - 您将尝试通过函数调用调用每个像素!

因此,一旦你添加了不同的缩放级别,你就必须弄清楚如何在屏幕上显示它 - 以及这对玩家来说意味着什么:)