• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            專職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 on 2009-09-19 23:35 冬瓜 閱讀(2397) 評論(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嗎?  回復  更多評論
              

            熟妇人妻久久中文字幕| 久久亚洲AV无码西西人体| 久久久精品2019免费观看 | 99久久亚洲综合精品网站| 国产精品免费久久久久影院| 日日狠狠久久偷偷色综合96蜜桃 | 久久亚洲精品中文字幕| 久久久久久狠狠丁香| 欧美日韩成人精品久久久免费看 | 欧美精品福利视频一区二区三区久久久精品 | 亚洲伊人久久综合中文成人网| 亚洲中文字幕无码久久2017 | 国产精品激情综合久久| 久久人人爽人人人人爽AV| 99久久精品这里只有精品 | 精品国产乱码久久久久久浪潮| 精品久久亚洲中文无码| 久久久久国产日韩精品网站| 久久av无码专区亚洲av桃花岛| 久久国产视屏| 久久无码av三级| 国产精品无码久久综合| 东方aⅴ免费观看久久av| 久久人人爽人人爽人人片AV东京热| 热re99久久精品国99热| 欧美久久久久久| 无夜精品久久久久久| 久久无码国产| 亚洲精品tv久久久久久久久久| 久久国产精品免费| 四虎国产精品免费久久5151| 热re99久久6国产精品免费| 一本久久a久久精品亚洲| 亚洲精品tv久久久久久久久| 婷婷久久五月天| 欧美一区二区久久精品| 欧美伊人久久大香线蕉综合| 亚洲国产日韩欧美综合久久| 久久无码精品一区二区三区| 久久国产免费直播| 久久亚洲AV无码精品色午夜麻豆|