巨大 SDL_Textures - 内存不足
Huge SDL_Textures - Out of Memory
我正在编写一个基于 Tile 的游戏的原型来学习 SDL.My 地图只是一个 257x257 的 Tiles 数组,每个 Tile 是 1x1 到 60x60 像素(不同的缩放)。SDL Window 有一个分辨率为 1024x768。所以我可以显示 18x13 到 1024*768 的图块。
到目前为止,我尝试了 2 种方法。
第 1 步:从 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));
缺点:这很耗时,如果我尝试移动地图,游戏就会开始滞后。
第二次在游戏开始前创建纹理
与:SDL_CreateRGBSurface
、SDL_FillRect
、SDL_CreateTextureFromSurface
con:纹理将是 (257x257)(Tiles)x(60x60)(pixel/Tile)x(32)(bit/pixel) ~ 951 MB。并且对于不同的缩放具有多个纹理,它的处理方式非常庞大。
如果有任何提高性能的提示,我将不胜感激。
第一个示例只绘制了一个填充的矩形...这不会很慢,我必须看到更多才能给出更好的答案。
一般来说,您会希望只渲染屏幕上可见的图块,而不是地图本身的图块。对于 60x60 的图块,您只需使用 SDL 2d 绘图功能即可。当您添加不同的缩放级别时,恐怕您将无法仅使用 1x1 像素图块并使用相同的方法 - 您会尝试通过函数调用来调用每个像素!
因此,一旦您添加了不同的缩放级别,您就必须弄清楚如何将其显示在屏幕上 - 以及这对玩家来说意味着什么:)
我正在编写一个基于 Tile 的游戏的原型来学习 SDL.My 地图只是一个 257x257 的 Tiles 数组,每个 Tile 是 1x1 到 60x60 像素(不同的缩放)。SDL Window 有一个分辨率为 1024x768。所以我可以显示 18x13 到 1024*768 的图块。
到目前为止,我尝试了 2 种方法。
第 1 步:从 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));
缺点:这很耗时,如果我尝试移动地图,游戏就会开始滞后。
第二次在游戏开始前创建纹理
与:SDL_CreateRGBSurface
、SDL_FillRect
、SDL_CreateTextureFromSurface
con:纹理将是 (257x257)(Tiles)x(60x60)(pixel/Tile)x(32)(bit/pixel) ~ 951 MB。并且对于不同的缩放具有多个纹理,它的处理方式非常庞大。
如果有任何提高性能的提示,我将不胜感激。
第一个示例只绘制了一个填充的矩形...这不会很慢,我必须看到更多才能给出更好的答案。
一般来说,您会希望只渲染屏幕上可见的图块,而不是地图本身的图块。对于 60x60 的图块,您只需使用 SDL 2d 绘图功能即可。当您添加不同的缩放级别时,恐怕您将无法仅使用 1x1 像素图块并使用相同的方法 - 您会尝试通过函数调用来调用每个像素!
因此,一旦您添加了不同的缩放级别,您就必须弄清楚如何将其显示在屏幕上 - 以及这对玩家来说意味着什么:)