游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4489|回复: 15

关于消息处理的一个疑问

[复制链接]

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
发表于 2005-2-22 13:24:00 | 显示全部楼层 |阅读模式
最近在看一本游戏编程的书,里面关于场景渲染的伪代码这么写
for(;;)
    if(有消息)
    {
        处理消息;
    }
    else if(程序激活)
    {
        渲染;
    }
    else
    {
    等待消息;
    }
我有点看不懂,比如一个FPS游戏,按照上面的结构,如果我一直按住键盘的"上",也就是人物往前走,那就一直是有消息了,那么画面不就停止渲染了吗?
还有,所谓的"程序激活"是什么意思啊?高手请解答

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-2-22 13:29:00 | 显示全部楼层

Re:关于消息处理的一个疑问

嘿嘿,上当了吧,这种书也看

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2005-2-22 13:31:00 | 显示全部楼层

Re: 关于消息处理的一个疑问

bool bUpKeyDown = false;
for(;;)
    if(有消息)
    {
        处理消息;
        if(上键按下)
       {
          bUpKeyDown = true;
       }
       if(上键松开)
       {
          bUpKeyDown = false;
       }
    }
    else if(程序激活状态)
    {
        渲染;
    }
    else
    {
    等待消息;
    }

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-22 13:47:00 | 显示全部楼层

Re:关于消息处理的一个疑问

回楼上,你的代码我还是不太明白,假设一直是"有消息"的话,那么ELSE IF就一直不被执行,比如按了一秒钟的键,那这一秒钟内画面不就没了?

32

主题

543

帖子

543

积分

高级会员

Rank: 4

积分
543
发表于 2005-2-22 14:27:00 | 显示全部楼层

Re: Re: 关于消息处理的一个疑问

kingmark: Re: 关于消息处理的一个疑问

bool bUpKeyDown = false;
for(;;)
    if(有消息)
    {
        处理消息;
        if(上键按下)
...

大侠bUpKeyDown这变量是控制什么的?????

43

主题

298

帖子

1510

积分

金牌会员

Rank: 6Rank: 6

积分
1510
发表于 2005-2-22 14:48:00 | 显示全部楼层

Re:关于消息处理的一个疑问

windows的按钮事件,按下按钮是一个事件,取消按钮是另一个事件,所以不会出现
按一秒画面全没有的问题。至于如何判断持续按钮,则需要自己写程序另外进行处理
了。

89

主题

822

帖子

847

积分

高级会员

Rank: 4

积分
847
发表于 2005-2-22 15:36:00 | 显示全部楼层

Re:关于消息处理的一个疑问

for( ; ; )
{
    Update( );
    Render( );
}

Update( )
{
    // 处理消息
    // 组织数据
    // 控制状态
}

Render( )
{
    // 渲染
}

29

主题

421

帖子

436

积分

中级会员

Rank: 3Rank: 3

积分
436
发表于 2005-2-22 16:19:00 | 显示全部楼层

Re: Re:关于消息处理的一个疑问

xiang: Re:关于消息处理的一个疑问

回楼上,你的代码我还是不太明白,假设一直是"有消息"的话,那么ELSE IF就一直不被执行,比如按了一秒钟的键,那这一秒钟内画面不就没了?


对不起,没注意哪里还有个else等着我呢?呵呵。
看bigbook2000就好。

--------------------------修改--------------------------
看bigbook2000说的就好。

9

主题

36

帖子

36

积分

注册会员

Rank: 2

积分
36
 楼主| 发表于 2005-2-22 16:40:00 | 显示全部楼层

Re:关于消息处理的一个疑问

BIGBOOK2000是什么东东?教程吗?能给个地址吗?

193

主题

870

帖子

903

积分

高级会员

Rank: 4

积分
903
QQ
发表于 2005-2-22 17:41:00 | 显示全部楼层

Re:关于消息处理的一个疑问

用std::map<std::string, class action *> actionMap来实现
vc7.1是可以用std::string作为键值的。

bool postEvent(const std::string &event)
{
     std::map<std::string, class action *>::iterator it;
     it=actionMap.find(event);
     if(it!=actionMap.end())
           it->second->do();
     else
          return false;
}

这是个简单的伪码,虽然不是很专业,不过比你的好点,一是效率高,
二是可以动态的添加动作。

要更专业的,就要有限状态机,消息触发,轮寻这些了。

看看魔兽3的编辑器,觉得他使用轮寻的,因为我用触发来想怎么也想不通:(
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-12-24 12:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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