SDL:简单位图的FPS问题

时间:2010-09-13 21:31:01

标签: graphics sdl

我目前正在开发一款具有可破坏地形的SDL游戏。目前,地形是一个大的(5000 * 500,用于测试)位图,它是随机生成的。

清除主表面的每个帧,并将地形位图嵌入其中。目前的分辨率为1200 * 700,因此当我测试1200 * 500像素时,大多数点都可见。

现在的问题是:FPS已经下降了!我认为一个简单的位图不应该显示任何效果 - 但我已经用这个降到了~24 FPS!

  • 为什么是blitting&绘制那么大的位图这么慢?
  • 我是否在可破坏的地形上采取了错误的做法?

  • 像蠕虫这样的游戏如何做到这一点? FPS看起来真的很高,尽管那里肯定有很多像素

3 个答案:

答案 0 :(得分:0)

每当初始化曲面时,请按以下方式执行:

SDL_Surface* mySurface;
SDL_Surface* tempSurface;
tempSurface = SDL_LoadIMG("./path/to/image/image.jpg_or_whatever"); 
/* SDL_LoadIMG() is correct name? Not sure now, I`m at work, so I can`t verify it. */
mySurface = SDL_DisplayFormat(tempSurface);
SDL_FreeSurface(tempSurface);

SDL_DisplayFormat()方法将曲面的像素格式转换为视频曲面使用的格式。如果你不按照我上面描述的方式进行操作,SDL会在每次表面布线时执行此操作。

永远记住:只需将玩家可见的必要部分搞定。

这是我的第一个猜测,为什么你遇到性能问题。如果您想要更多的tipp,请发布您的代码或询问更具体的问题。祝你的游戏好运。

答案 1 :(得分:0)

如果你在每一帧重绘整个屏幕,那么你的FPS总会变坏。您必须仅重绘已更改的部分屏幕。您也可以尝试使用SDL_HWSURFACE来使用硬件,但它不适用于每个图形卡。

答案 2 :(得分:0)

SDL中的2d非常慢,并且没有太多可以让它更快(在Windows上至少它默认使用GDI进行绘制。)您的选择是:

  1. 去opengl并开始为精灵使用纹理四边形。
  2. 尝试SFML。它提供硬件加速的2d环境。
  3. 使用SDL 1.3获取源快照它不稳定且仍在开发中但硬件加速2d应该是主要卖点之一。