gpt4 book ai didi

c++ - 巨大的 SDL_Textures - 内存不足

转载 作者:太空宇宙 更新时间:2023-11-04 13:40:23 25 4
gpt4 key购买 nike

我正在编写一个基于 Tile 的游戏的原型(prototype)来学习 SDL。我的 map 只是一个 257x257 的 Tiles 阵列,每个 Tile 是 1x1 到 60x60 像素(不同的缩放)。SDL 窗口的分辨率为 1024x768。所以我可以显示 18x13 到 1024*768 的图 block 。

到目前为止,我尝试了 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));

缺点:这很耗时,如果我尝试移动 map ,游戏就会开始滞后。


第二次在游戏开始前创建纹理

使用:SDL_CreateRGBSurfaceSDL_FillRectSDL_CreateTextureFromSurface

con:纹理将是 (257x257)(Tiles)x(60x60)(pixel/Tile)x(32)(bit/pixel) ~ 951 MB。并且对于不同的 Zoom 有多个纹理,它的处理方式非常庞大。

如果有任何提高性能的提示,我将不胜感激。

最佳答案

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

一般来说,您希望只渲染屏幕上可见的图 block ,而不是 map 本身的图 block 。对于 60x60 的图 block ,您只需使用 SDL 2d 绘图功能即可。当您添加不同的缩放级别时,恐怕您将无法仅使用 1x1 像素图 block 并使用相同的方法 - 您会尝试通过函数调用来调用每个像素!

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

关于c++ - 巨大的 SDL_Textures - 内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27889460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com