游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3425|回复: 8

游戏主循环的思考...

[复制链接]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2009-12-7 23:14:00 | 显示全部楼层 |阅读模式
最近,发现游戏主循环都是通过这样的格式实现的:

while(TRUE)
{
      if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
      {
           if (msg.message == WM_QUIT)
               break;
        TranslateMessage(&msg);
        DispatchMessage(&msg);
      }  
    // main game processing goes here
    Game_Main();
}

然而,在Game_Main()中为了实现33ish fps,又用到while((GetTickCount()-nPreCount)>30)来达到目的的。然而,这意味着游戏程序一直都在忙碌的工作,cpu为持处在100%的利用状态。

我个人试了一下,用sleep()来实现33ish fps来实现,效果好很多。但,无法准确定位sleep多少s...

所以,在此想请教下大家在处理这个问题时,是怎么完美的解决的。

2万

主题

2万

帖子

6万

积分

论坛元老

Rank: 8Rank: 8

积分
66489
QQ
发表于 2009-12-7 23:18:00 | 显示全部楼层

Re:游戏主循环的思考...

unsigned __int32 last_time,cur_time;
unsigned __int32 gap_time=1000/fps;

while(true)
{
last_time=GetTickCount();
  ...

  cur_time=GetTickCount();
  sleep(gap_time-(cur_time-last_time));
}

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-12-8 21:04:00 | 显示全部楼层

Re:游戏主循环的思考...

谢谢楼主的回答,我看一些游戏方面的书籍上也是这么来解决的。
不过,没有实际开发过商业游戏,不知道它们是怎么解决的。。。

5

主题

56

帖子

58

积分

注册会员

Rank: 2

积分
58
发表于 2009-12-8 21:26:00 | 显示全部楼层

Re:游戏主循环的思考...

网络团队,游戏开发,3D仙侠游戏开发。
欢迎策划(关卡,数值等)、美术(角色、特效)程序(精通torque)。
最好有一到两年以上经验的。(已有近20人的团队,人数按照为项目做出实际贡献计算的,并非表示有兴趣的人)。
详细情况,敬请加群63083916

180

主题

3511

帖子

3520

积分

论坛元老

Rank: 8Rank: 8

积分
3520
发表于 2009-12-8 22:00:00 | 显示全部楼层

Re: 游戏主循环的思考...

Game9D: 游戏主循环的思考...
while(TRUE)
{
  if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
  {
    if (msg.message == WM_QUIT)break;
    TranslateMessage(&msg);
    DispatchMessage(&msg);
  }  
  Game_Main();
}

不行!
这样的主循环不适合做游戏主循环。用作工具软件的主循环还可以。

为什么我这么说?
想想看,如果到了一个比较卡的场景(比如WOW里的沙塔斯城),FPS降低到15帧了。
这时,你要做“S+D+空格+鼠标右键+鼠标滑动”的操作,这个游戏能马上做出反应吗?
不能。
因为“S,D,空格,鼠标右键,鼠标滑动”这5个消息,在这个循环上要经过5次循环才能完成。。。[em6]
也就是说我这5个消息要等到1/3秒(5/15=1/3)之后才能完全输送给游戏。
你能忍受一个本地操作也会延迟1/3秒的游戏吗?
[em17]

1

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
 楼主| 发表于 2009-12-9 19:52:00 | 显示全部楼层

Re: Re: 游戏主循环的思考...

snhun: Re: 游戏主循环的思考...


不行!
这样的主循环不适合做游戏主循环。用作工具软件的主循环还可以。

为什么我这么说?
想想看,...

[em2]说得很好,确实会出现上面的问题。看来这个主循环只是拿来学习用的,哈哈。
非常感觉楼上的回答。
有没有谁能给出一个商业游戏,比较好的主流程设计方面的例子,在此先谢谢了......

34

主题

443

帖子

478

积分

中级会员

Rank: 3Rank: 3

积分
478
发表于 2009-12-10 16:37:00 | 显示全部楼层

Re:游戏主循环的思考...

http://www.cnblogs.com/oiramario/archive/2009/09/23/1572836.html
千里马肝翻译的文章~~

362

主题

3023

帖子

3553

积分

论坛元老

Rank: 8Rank: 8

积分
3553
发表于 2009-12-11 19:32:00 | 显示全部楼层

Re:游戏主循环的思考...

游戏应当用DirectInput.

13

主题

312

帖子

312

积分

中级会员

Rank: 3Rank: 3

积分
312
发表于 2009-12-12 02:54:00 | 显示全部楼层

Re:游戏主循环的思考...

支持一下 :〉


-------------------------------------------------------------------------------------------

欢迎访问开源图形处理器体系结构论坛(OpenGPU论坛) http://www.opengpu.org/bbs/

OpenGPU Graphics Open Source community(图形开源社区),聚焦领域(focus domain)包括:
  * GPU Architecture(图形处理器体系结构)
  * Graphics Algorithm(图形算法)
  * GPGPU Programming (面向通用的图形处理器编程)
  * Open Source Rendering Engine(开源渲染器)
  * Open Source GPU Simulator/RTL Implement(开源GPU模拟器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-17 11:49

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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