• <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
            av色综合久久天堂av色综合在| 国产精品久久久久天天影视| 久久亚洲精品无码播放| 亚洲午夜无码AV毛片久久| 99久久无色码中文字幕人妻| 97久久国产亚洲精品超碰热 | 婷婷久久综合九色综合九七| 日本久久中文字幕| 99久久精品国内| 一本大道久久东京热无码AV| 国产亚洲精久久久久久无码| 欧美精品丝袜久久久中文字幕| 久久精品国产亚洲AV无码娇色| 久久精品一区二区三区中文字幕| 亚洲AV日韩精品久久久久久| 日本国产精品久久| 99久久亚洲综合精品成人| 日产精品久久久久久久性色| 久久伊人中文无码| 国产成人久久精品二区三区| 97精品伊人久久大香线蕉app| 久久久国产视频| 久久精品视频91| 国产福利电影一区二区三区,免费久久久久久久精 | 久久久久久无码国产精品中文字幕 | 国产毛片欧美毛片久久久| 色播久久人人爽人人爽人人片aV| 精品国产福利久久久| 亚洲国产精品一区二区久久hs| 四虎国产精品成人免费久久| 国产激情久久久久影院老熟女免费| 成人午夜精品无码区久久| 国产69精品久久久久观看软件| 久久综合视频网站| 欧美久久亚洲精品| 亚洲国产一成久久精品国产成人综合| 国产成人久久777777| 久久久久99精品成人片牛牛影视| 99久久中文字幕| 国内精品久久久久久不卡影院| 精品久久国产一区二区三区香蕉|