• <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 閱讀(2521) 評論(0)  編輯 收藏 引用 所屬分類: cocos2dx
            精品久久久噜噜噜久久久 | 欧美一级久久久久久久大| 一级做a爰片久久毛片人呢| 亚洲狠狠久久综合一区77777| 久久精品夜色噜噜亚洲A∨| 亚洲AV伊人久久青青草原| 老色鬼久久亚洲AV综合| 精品久久久久久无码人妻蜜桃| 久久亚洲精品成人无码网站| 久久精品人成免费| 久久久久女教师免费一区| 亚洲AV日韩精品久久久久| 国产精品伦理久久久久久| 久久强奷乱码老熟女网站| 波多野结衣中文字幕久久| 久久高清一级毛片| 国产精品久久国产精麻豆99网站| 欧美伊人久久大香线蕉综合69 | 奇米影视7777久久精品人人爽| 久久久久人妻一区精品色| 手机看片久久高清国产日韩| 精品午夜久久福利大片| 精产国品久久一二三产区区别| 久久精品国产亚洲一区二区三区| 97久久综合精品久久久综合| 无码人妻久久一区二区三区蜜桃| 精品国产91久久久久久久a | 精品久久久久久国产免费了| 久久精品国产99久久久| 亚洲伊人久久大香线蕉综合图片| 亚洲欧洲精品成人久久曰影片 | 久久精品蜜芽亚洲国产AV| 中文字幕人妻色偷偷久久| 久久亚洲AV成人无码软件| 一极黄色视频久久网站| 亚洲国产小视频精品久久久三级 | 欧美亚洲另类久久综合| 精品午夜久久福利大片| 色偷偷888欧美精品久久久| 久久久青草久久久青草| 99久久精品国产一区二区|