我正在用 SDL 编写游戏。我已经通过 SDL_gfx 库的 zoomSurface 函数实现了可缩放的窗口大小,但是男孩确实帧速率受到了影响(大概是因为每次调用 zoomSurface 时,它都会创建一个全新的 SDL_Surface 实例,并且为了连续缩放你需要调用每一帧)。
我对使用 SDL 进行编程非常陌生,所以我不知道它可能具有的任何其他功能。有没有更快的方法来做到这一点?
SDL 并不真正支持这一点。
最“正确”的方法是使用底层图形 API(OpenGL 或 DirectX)进行缩放。例如,glScale{f,d}
如果您在后台使用 OpenGL,则调用。但是,我相信 Windows 上的 SDL 被编译为使用 DirectX,因此这不是一个可移植的解决方案。
当您需要将所有内容缩放某个因素时,另一种方法是重新创建所有表面。这很慢,但不需要每一帧都做;它只需要在缩放因子发生变化时执行一次,然后缩放后的表面可以保存在内存中并为每一帧重复使用。
请记住,对于 2D 游戏来说,允许缩放调整大小通常没有意义,因为除非使用某些过滤器,否则精灵在拉伸时往往看起来很糟糕。