游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2733|回复: 9

C++ 简单的游戏循环问题

[复制链接]

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2007-5-23 20:02:00 | 显示全部楼层 |阅读模式
NEHE 的代码如下:
while(1)
{
    if(有消息)
    {处理消息}

    else
    {游戏逻辑}
}
-----------------
我的代码如下:
while(1)
{
    while(有消息)
    {处理消息}

    游戏循环
}
-----------------
OpenGL 讨论区里有个叫 nickzj 的人说:
“采用nehe的结构,有系统消息的时候不进入游戏循环。但是,
你写的是两个while,不管有没有消息都要进入游戏循环”。

可是我觉得我这个代码,功能上跟 NEHE 的完全一样(nickzj说不一样),速度又比 NEHE 的更快。

谁说的对?

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-5-23 21:25:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

我是渣,最喜欢看吵架贴了,谢谢LZ让我在这个大热天又爽了一把。
那帖的2楼回答很是放P,幸好没怎么被人指责~
稍微又想了下,循环几下也不会死人,关键看消息处理时花多少时间,时间花多了,1个消息也能卡死你,哈。

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-5-23 21:31:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

云风的代码:http://blog.codingnow.com/2006/12/main_loop_windows_timer.html
我发现自己的代码有抄云风这段的痕迹,华丽的goto~
for(;;) {
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) {
        if (msg.message==WM_QUIT) {
            goto _quit;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    render_frame();
}

_quit:...

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
 楼主| 发表于 2007-5-24 15:08:00 | 显示全部楼层

Re: Re:C++ 简单的游戏循环问题

funcman: Re:C++ 简单的游戏循环问题
for(;;) {
    MSG msg;
    while(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) {
        if (msg.message==WM_QUIT) {
            goto _quit;
        }
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    render_frame();
}

处理消息也是用了 while(有消息){处理消息}; !

9

主题

45

帖子

49

积分

注册会员

Rank: 2

积分
49
发表于 2007-5-24 16:21:00 | 显示全部楼层

Re: C++ 简单的游戏循环问题

只能说楼主相当的无聊,这个东西在游戏里面可以有很多简单的做法.
这其实是一个非常简单的问题,无论用for,while都无所谓.
一般写成这样都可以了:
for(;;)
{
  if(UpdateSystemMessage())
    if(g_pGame->updateRun();)
       {
         sleep(1);
         continue();
       }
  
  break;
}

UpdateSystemMessage()处理与系统消息相关的事情,比如输入之类的,g_pGame是游戏框架,单件.如果系统消息的相关信息需要与游戏有交互,那么这个框架提供一套接口就可以了.
如果是服务器的话,这个updateRun里面没有render的.
简单来说,
bool upDateRun()
{
  OnHandleSystemMessage();
  OnHandleGameMessage();
  ...
  GameObjectUpdate();
}

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-5-24 18:44:00 | 显示全部楼层

Re: C++ 简单的游戏循环问题

goto 。。。 真的假的,这东西不是早就被摒弃了么,蘑菇人啊 [em1]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-5-24 18:47:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

就目前我的理解能力来说,我觉得 if好,套while是不是要压栈呢。我不懂装懂,各位高手见谅

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2007-5-24 22:15:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

觉得不好,就慢慢break也没人拦你

0

主题

172

帖子

176

积分

注册会员

Rank: 2

积分
176
发表于 2007-5-24 22:33:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

for,while多层嵌套时,goto恰好能发挥出非常好的效果。

106

主题

743

帖子

745

积分

高级会员

Rank: 4

积分
745
QQ
发表于 2007-5-25 11:07:00 | 显示全部楼层

Re:C++ 简单的游戏循环问题

想起一个goto问题:怎样把标号的值附给变量?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 09:22

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表