• <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>

            f(sixleaves) = sixleaves

            重劍無鋒 大巧不工

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              95 隨筆 :: 0 文章 :: 7 評論 :: 0 Trackbacks
            inherent
            cocos2dx調度器的類圖路上所示,調度器繼承自Ref類,該類實現了內存的自動管理機制。
            我們先看一下官方文檔的介紹,一下是引用官方文檔,到-----線為止。

            原理介紹

            Cocos2d-x調度器為游戲提供定時事件和定時調用服務。所有Node對象都知道如何調度和取消調度事件,使用調度器有幾個好處:

            1. 每當Node不再可見或已從場景中移除時,調度器會停止。
            2. Cocos2d-x暫停時,調度器也會停止。當Cocos2d-x重新開始時,調度器也會自動繼續啟動。
            3. Cocos2d-x封裝了一個供各種不同平臺使用的調度器,使用此調度器你不用關心和跟蹤你所設定的定時對象的銷毀和停止,以及崩潰的風險。

            基礎用法

            使用場景:游戲中我們經常會隨時間的變化而做一些邏輯判斷,如碰撞檢測。為了解決以上問題,我們引入了調度器,這使得游戲能夠更好的處理動態事件。Cocos2d-x提供了多種調度機制,在開發中我們通常會用到3種調度器:

            1. 默認調度器:schedulerUpdate()
            2. 自定義調度器:schedule(SEL_SCHEDULE selector, float interval, unsigned int repeat, float delay)
            3. 單次調度器:scheduleOnce(SEL_SCHEDULE selector, float delay)

            以下我們來對這3種調度器做簡單的介紹。

            -------------------------------------------------------------------------------------------------------------------------------------------------------------------
            我的理解:
            我們知道schedulerUpdate()也就是默認調度器的實現是基于update方法,該方法是虛方法定義在Node類中,在cocos2dx框架中。會在每次繪制一幀之前調用update方法,但是默認情況下,這個方法是不啟用的。
            也許你也有這個疑問,為什么update方法可以實現調度。可以實現游戲邏輯的判斷。這就需要對游戲有一個認識,游戲都是由一幀一幀繪制而成,在一定范圍內的不同時刻,對應的會是不同的游戲畫面。回想一下,你學過的微積分
            ,如果我們把游戲的看成是微積分,那么這每一幀就是微分。所以幀率越高,游戲越逼真,越流程,體驗度越高。我們也可以借助這一思想來理解,為什官方框架中會對update做出下面這句解釋。
            該調度器是使用Node的刷新事件update方法,該方法在每幀繪制之前都會被調用一次。由于每幀之間時間間隔較短,所以每幀刷新一次已足夠完成大部分游戲過程中需要的邏輯判斷。綠色這句話是引用自官方,可能你會不理解
            為什么說每幀之間間隔較短,所以每一幀刷新以此足夠完成部分游戲邏輯的判斷。
            由官方文檔我們知道一下代碼的執行順序,下面用偽代碼表示
            {
                   1:
                     update();執行update方法
                     drawOneFrame();繪制一幀
                    go 1;
            }
            由上面的偽代碼我們知道其想表達的意思是說,由于幀率比較高,能模擬出更真實的效果。而update方法敲好是在兩幀之間調用,所以update的執行時間一般來說是和幀率相互掛鉤。
            也就是說update里面的所有變量其實是無限趨近于drawOneFrame()的。所以我們可以再update中書寫一些游戲邏輯。簡而言之,在update里面可以做的事等效于給每一幀里面各個對象的做邏輯判斷。


            接下來分析下自定義調度器,先看官方文檔解說。

            自定義調度器(scheduler)

            游戲開發中,在某些情況下我們可能不需要頻繁的進行邏輯檢測,這樣可以提高游戲性能。所以Cocos2d-x還提供了自定義調度器,可以實現以一定的時間間隔連續調用某個函數。

            由于引擎的調度機制,自定義時間間隔必須大于兩幀的間隔,否則兩幀內的多次調用會被合并成一次調用。所以自定義時間間隔應在0.1秒以上。

            同樣,取消該調度器可以用unschedule(SEL_SCHEDULE selector, float delay)。
            我的理解:
            其實讀完這個解說你應該更清楚了我前面理論的正確性,如果你定義的間隔時間比兩幀短,也就是說,將在同一幀類不斷的重復回調selector指向的方法。但這是不需要的所以官方會說將
            兩幀內的多次調用會被合并成一次調用。
            自定義時間應該在0.1秒以上,幀率就是10.也就是你定義的定時器的頻率應該小于10,或者說間隔時間應該大于0.1。


            當然cocos2dx框架還提供單次調度器具體看官方文檔,這個就很好理解了,不解釋和分析。
            2015/4/6上午1:03:59

            posted on 2015-04-06 00:57 swp 閱讀(2529) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
            无码精品久久久天天影视| 国产精品无码久久久久| 久久精品免费一区二区| 亚洲国产精品无码久久一线 | 2021精品国产综合久久| 久久se精品一区精品二区国产| 日韩亚洲国产综合久久久| 亚洲成色www久久网站夜月| 999久久久国产精品| 亚洲精品无码专区久久久| 精品国产综合区久久久久久| 亚洲午夜久久久影院| 久久久精品国产Sm最大网站| 久久久噜噜噜久久熟女AA片| 久久婷婷五月综合色99啪ak| 久久福利青草精品资源站免费| 亚洲国产成人久久精品99| 97久久久久人妻精品专区| 久久久WWW免费人成精品| 久久久久久久亚洲Av无码| 日本精品一区二区久久久| 久久精品国产秦先生| 久久夜色精品国产欧美乱| 久久婷婷五月综合国产尤物app| 66精品综合久久久久久久| 久久亚洲精品成人av无码网站 | 久久久久99精品成人片直播| 亚洲国产成人乱码精品女人久久久不卡 | 国产韩国精品一区二区三区久久| 综合久久一区二区三区 | 久久综合色之久久综合| 99热成人精品免费久久| 久久综合狠狠色综合伊人| 久久66热人妻偷产精品9| 亚洲国产精品无码久久久蜜芽| 亚洲国产婷婷香蕉久久久久久| 久久久久亚洲AV成人网| 久久精品视频91| 中文字幕无码久久人妻| 精品久久亚洲中文无码| 日韩人妻无码一区二区三区久久 |