运行时如何在全屏和窗口之间切换?我找到了该SDL_WM_ToggleFullScreen
功能,但根据 SDL 文档,它似乎不适用于 Windows。
是的,文档说明该SDL_WM_ToggleFullScreen
功能目前仅适用于 X。
我这样做的方式是这样的:
void SdlGraphics::setupScreenSurface() {
Uint32 flags = 0;
flags |= SDL_HWSURFACE;
flags |= SDL_DOUBLEBUF;
if(isFullScreen) {
flags |= SDL_FULLSCREEN;
}
screenSurface = boost::shared_ptr<SDL_Surface>(
SDL_SetVideoMode(width, height, depth, flags),
utility::NullDeleter()
);
}
void SdlGraphics::setFullScreen(bool fullScreen) {
if(isFullScreen != fullScreen) {
isFullScreen = fullScreen;
setupScreenSurface();
}
}
对于这些要点:
我几乎会推荐使用带有 SDL 的 OpenGL 模式。它会给你硬件加速的自由来做这些事情。rotozoom
都是在软件中完成的(据我所知),这就是它如此缓慢的原因。它总是很慢。
在以 2x 绘制精灵时,您可能还有一个选择是将所有内容绘制为 1x 大小的纹理,然后在绘制完所有内容后,将该纹理缩放 2x。然后你只处理一个表面,而不是每帧一遍又一遍地处理许多小的表面。
至于光标问题,听起来您可能希望尽可能快地绘制,但只能以恒定速率更新您的游戏。这样,您将获得流畅的滚动,但游戏不会失控。