微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

设计游戏循环

如何解决设计游戏循环

我正在开发一个简单的 Win 游戏。这是我对游戏循环的 2 个类似实现(在 C++ 中):

方法#1:

while (Msg.message != WM_QUIT) {

        if (PeekMessage(&Msg,NULL,PM_REMOVE) > 0) {
            TranslateMessage(&Msg);
            dispatchMessage(&Msg);
        }
        else {
            // Do update,rendering and all the real game loop stuff
        }
}

方法#2:

while (Msg.message != WM_QUIT) {

        if (PeekMessage(&Msg,PM_REMOVE) > 0) {
            TranslateMessage(&Msg);
            dispatchMessage(&Msg);
        }
        
        // Do update,rendering and all the real game loop stuff
        
}}

我的问题是哪个更好,我应该选择哪个?是像 #1 方法那样在 else 闭包中进行更新和渲染,还是像 #2 方法那样只在 while 循环块中进行更新和渲染?

解决方法

答案完全取决于用例。

在第一种方法中,您在更新游戏状态之前处理队列中的任何消息。这可能会让您免去一些因较旧的消息而引起的更新,而这些消息已被较新的消息过时。

不过,在负载很重的队列上,这可能会导致您的应用反应不佳甚至冻结。

第二种方法通过始终更新游戏状态来避免这种情况。

第一种方法可能会变得更健壮 e。 G。只允许在强制执行更新之前处理最大数量的消息。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。