我正在使用SDL开始一个小RTS游戏,这里有一些问题:
SDL_WM_ToggleFullScreen
功能但是
它似乎不适用于Windows
根据SDL doc。SDL_Delay
并且这样做了
指针动作不顺畅。 SDL
光标似乎没有受到影响
应用程序帧率是一个
更好的解决方案是使用它,如果是这样,有没有办法使用图片而不是奇怪的面具?draw_lit_sprite
一样
快板)答案 0 :(得分:3)
如何在跑步时在全屏和窗口之间切换?我找到了
SDL_WM_ToggleFullScreen
函数,但根据SDL doc,它似乎在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();
}
}
对于这些要点:
我和小精灵一起工作,有没有 显示屏幕x2的方式 扫描线?我试过放大它 rotozoom但它减慢了游戏速度 我想避免缩放我的 手工精神。
如何表面(如Allegro中的
draw_lit_sprite
)
我几乎建议在SDL中使用OpenGL模式。它将为您提供硬件加速自由来完成这些事情。 rotozoom
都是用软件完成的(据我所知),这就是为什么它太慢了。它总是很慢。
在2x处绘制精灵时,您可能拥有的另一个选项是将所有内容绘制为1x大小的纹理,然后在绘制完所有内容后,将该纹理缩放2x。然后,你只需要处理单个表面,而不是每帧处理多个小表面。
至于光标问题,听起来你可能想成为drawing as fast as possible, but only updating your game at a constant rate。这样你就可以顺利滚动,但游戏玩法不会失控。
答案 1 :(得分:2)
精灵大小 - 对于任何类型的实时缩放或旋转,您最好使用OpenGL而不是像SDL这样的软件阻击器。其他库如SFML为你包装了这个。
全屏/窗口 - Zack的答案看起来不错,只需再次调用SDL_SetVideoMode。
光标移动 - 通常操作系统将鼠标与底层应用程序分开渲染,以使其保持响应。如果您自己渲染鼠标光标,那么您唯一的办法就是更快地渲染您的游戏。我认为你对光标本身没有多少选择(可能是由于跨平台的要求)。
帧率 - 许多人建议将你的帧速率与游戏中的运动和物理分离(例如,参见'Fix Your Timestep')。另外,请注意SDL_Delay对等待时间施加下限,而不是上限。
着色表面 - 再次,这最好由OpenGL执行,因为SDL不直接支持它。