我正在使用带有C ++的SDL编写2D平台游戏。但是我遇到了涉及扩展到分辨率的巨大问题。我希望游戏在全高清中看起来不错,因此游戏的所有图像都已创建,因此游戏的自然分辨率为1920x1080。但是,如果有人使用较小的分辨率,我希望游戏缩小到正确的分辨率,如果有人使用更大的分辨率,我希望缩小比例。
问题是我无法找到一种有效的方法来实现这一点。我首先使用SDL_gfx库预先缩放所有图像,但这不起作用,因为它创建了大量的off-by-一个错误,其中一个像素丢失。由于动画播放时我的动画包含在一个图像中,动画会在每帧上下移动。
然后经过一些回顾,我尝试使用opengl来处理缩放。目前我的程序将所有图像绘制到一个1920x1080的SDL_Surface。然后,它将此曲面转换为opengl纹理,将此纹理缩放到屏幕分辨率,然后绘制纹理。这在视觉上很好用,但问题是它根本没有效率。目前我得到的最大fps为18 :(
所以我的问题是,是否有人知道将SDL显示缩放到屏幕分辨率的有效方法?
答案 0 :(得分:10)
这是低效的,因为OpenGL不是以这种方式工作的。当前设计的主要性能问题:
我的建议:将您的应用程序完全切换到OpenGL。这消除了渲染到纹理并复制到屏幕的需要 - 只需直接渲染到屏幕!此外,缩放由您的视图矩阵自动处理(glOrtho / gluOrtho2D用于2D),因此您根本不必关心缩放问题< - 您的视口将只显示所有内容规模。 这是解决您问题的理想方法。
现在,它带来了一个主要的缺点,你必须用OpenGL绘图命令重新编码所有东西(这是工作,但不是太难,特别是从长远来看)。除此之外,您可以尝试以下想法来提高速度:
希望这会有所帮助。