专职C++

不能停止的脚步

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

常用链接

留言簿(28)

我参与的团队

搜索

  •  

最新评论

阅读排行榜

评论排行榜

#

因为项目的原因,需要用游戏引擎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 @ 2009-09-19 23:35 冬瓜 阅读(2374) | 评论 (6)编辑 收藏

     摘要: 在新发布的C++Builder 2010中,已经带了boost 1.39,安装的时候,选上就可以了。
总的来说,C++ Builder 2010这点是做的不错的,省了我们为了使用boost,要自己下载,并长时间的编译所带来的痛苦。最重要的是,还不一定成功。  阅读全文
posted @ 2009-09-01 17:47 冬瓜 阅读(5679) | 评论 (7)编辑 收藏

     摘要: 八月下旬,Embarcadero RAD Studio 2010 终于出来了,我下载了,试用了一下。找回了老的控件面板  阅读全文
posted @ 2009-08-31 12:11 冬瓜 阅读(3688) | 评论 (5)编辑 收藏

仅列出标题
共17页: First 9 10 11 12 13 14 15 16 17