专职C++

不能停止的脚步

  C++博客 :: 首页 :: 联系 :: 聚合  :: 管理
  142 Posts :: 7 Stories :: 134 Comments :: 0 Trackbacks

常用链接

留言簿(13)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

60天内阅读排行

因为项目的原因,需要用游戏引擎HGE,于是分析了一下。

总结:简单有效,但也过于简单了,下面是System_Start的注释!

bool CALL HGE_Impl::System_Start()

{

    MSG    msg;

    POINT  pt;

    RECT   rc;

 

    
if(!hwnd)  //如果系统没有初始化

    {

       _PostError(
"System_Start: System_Initiate wasn't called");

       
return false;

    }

 

    
if(!procFrameFunc)  //如果帧函数,没有实现

    { 

       _PostError(
"System_Start: No frame function defined");

       
return false;

    }

 

    bActive
=true;  //HGE进入活动状态

 

    
for(;;)

    {

       

       
if(!hwndParent) //如果没有父句柄

       {

           
if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))

           { 

              
if (msg.message == WM_QUIT) break;

              
// TranslateMessage(&msg);

              DispatchMessage(
&msg);

              
continue;

           }

       }

        
//取光标的位置,这个光标是屏

       GetCursorPos(
&pt);

        
//取客户端区域

       GetClientRect(hwnd, 
&rc);

        
//当光标切换为当前窗口所对应的坐标

       MapWindowPoints(hwnd, NULL, (LPPOINT)
&rc, 2);

        
//判断鼠标是否在当前窗口

       
if(bCaptured || (PtInRect(&rc, pt) && WindowFromPoint(pt)==hwnd)) bMouseOver=true

       
else bMouseOver=false;

        
//

       
if(bActive || bDontSuspend) 

        {

           
do 

            { 

                dt 
= timeGetTime() - t0; //t0以来经过的毫秒数,要确定要超过ms退出(相当于等待ms)

            } 

            
while(dt < 1);

 

           
if( dt >= nFixedDelta ) //如果到了帧的时间

           {

              fDeltaTime 
= dt / 1000.0f;

              
if( fDeltaTime > 0.2f ) //如果超过.2秒

              {

                  
if(nFixedDelta) fDeltaTime = nFixedDelta/1000.0f;

                  
else fDeltaTime = 0.01f;

              }

 

              fTime 
+= fDeltaTime;  //累计游戏的时间

 

               t0 
= timeGetTime();   //当前帧处理的时间

 

              
if( t0 - t0fps < 1000) cfps++//小于毫秒时,帧数加

              
else //如果超过毫秒时

                {

                    nFPS 
= cfps;   //设置当前秒帧计数

                    cfps 
= 0;      //计数器清

                    t0fps 
= t0;    //重设计数时间

                }

 

                
if( procFrameFunc() ) break;            //执得帧

              
if( procRenderFunc ) procRenderFunc();  //如果有渲染,则执得渲染

              
if( hwndParent ) break

              _ClearQueue();

 

              
if(!bWindowed && nHGEFPS == HGEFPS_VSYNC) Sleep(1);

           }

           
else 

            { 

                
if(nFixedDelta && dt+3 < nFixedDelta) Sleep(1); 

            }

       }

       
else Sleep(1);

    }

    _ClearQueue(); 
//清除没有处理的事件

    bActive
=false;

    
return true;

}


本文来自CSDN博客,转载请标明出处:http:
//blog.csdn.net/zdhsoft/archive/2009/04/24/4106748.aspx
posted on 2009-09-19 23:35 冬瓜 阅读(1927) 评论(6)  编辑 收藏 引用 所属分类: 原创HGE

Feedback

# re: HGE核心函数注释 2009-09-20 11:09 99书城
很不错啊~支持  回复  更多评论
  

# re: HGE核心函数注释 2009-09-20 14:59 forgot
这是核心吗?hge的皮毛都没摸到啊  回复  更多评论
  

# re: HGE核心函数注释 2009-09-20 15:23 Kevin Lynx
应该去分析下graphics.cpp下的图形渲染部分。  回复  更多评论
  

# re: HGE核心函数注释 2009-09-21 15:29 zdhsoft
这个是HGE的心脏!  回复  更多评论
  

# re: HGE核心函数注释[未登录] 2009-09-22 20:44 dophi
博主的名字叫“冬瓜” - -,我还以为这是我的博客。  回复  更多评论
  

# re: HGE核心函数注释[未登录] 2010-04-12 15:57 dd
随便写两下就说了解核心代码,楼主真了解了HGE吗?  回复  更多评论
  


只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理