我目前正在编写一个极其复杂和狡猾的游戏,它会让你充满敬畏和胜利 - 哦,好吧,这是 15 谜题,我只是让自己熟悉 SDL。
我在窗口模式下运行,并使用 SDL_Flip 作为一般情况下的页面更新,因为它在窗口模式下自动映射到整个窗口的 SDL_UpdateRect。不是最佳方法,但鉴于这只是 15 个难题......
无论如何,瓷砖移动正在以可笑的速度发生。IOW,窗口模式下的 SDL_Flip 不包括与垂直回溯的任何同步。我在 Windows XP ATM 中工作,但我认为这对 SDL 来说是正确的行为,并且也会发生在其他平台上。
切换到使用 SDL_UpdateRect 显然不会改变任何东西。据推测,我需要在自己的代码中实现延迟逻辑。但是一个简单的基于时钟的计时器可能会导致在窗口半画时发生更新,从而导致可见的失真(我忘记了技术名称)。
编辑 这个问题被称为“撕裂”。
那么 - 在 SDL 的窗口模式游戏中,我如何将我的翻页与垂直回溯同步?
编辑 我在寻找解决方案时看到了几个说法,即不可能将翻页同步到窗口应用程序中的垂直回溯。至少在 Windows 上,这完全是错误的——我已经编写了可以做到这一点的游戏(我的意思是类似于 15 谜题的水平)。我曾经浪费了一些时间来玩 Dark Basic 和 Dark GDK——它们都是基于 DirectX 的,并且都在窗口模式下将翻页同步到垂直回溯。