首页 文章

巨大的SDL_Textures - 内存不足

提问于
浏览
1

我编写了一个基于Tilebased游戏的Prototyp来学习SDL.My map只是一个257x257的Tiles数组,每个Tile是1x1到60x60像素(不同的缩放).SDL窗口的分辨率为1024x768 . 所以我可以显示18x13到1024 * 768的瓷砖 .

直到现在我尝试了2个approches .

1st: Render from 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:这是耗时的方式,如果我试图移动 Map ,游戏开始滞后 .


2nd create an texture before the Game starts

与: SDL_CreateRGBSurfaceSDL_FillRectSDL_CreateTextureFromSurface

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

我很欣赏任何提高性能的技巧 .

1 回答

  • 0

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

    通常,您需要在屏幕上渲染 only the tiles which are visible 而不是 Map 上的图块 . 使用60x60瓷砖,您可以使用SDL 2d绘图功能 . 当您添加不同的缩放级别时,我只能使用1x1像素图块并使用相同的方法 - 您将尝试通过函数调用调用每个像素!

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

相关问题