Cocos2D-x for XNA類解析(1): CCApplication

pamxy發表於2013-11-10

轉自:http://www.cnblogs.com/hielvis/archive/2012/06/04/2534672.html

Windows phone上最好的遊戲引擎cocos2d-x for XNA釋出也有幾個月了,作為移植團隊我們一直沒有時間獻上一些教程,現在我們要開始了,開啟你的Visual Studio,我們開始學習吧!
   這系列教程我會講解分析大部分開發者會用到的cocos2d-x for XNA的常用類的功能及用法,帶些示例程式碼,更多的交流請加我們的QQ群,在文章末尾:
 
   大部分框架,基本上都可以分為兩部分:
      1. 一個入口主類,它定義了整個應用程式的生命週期,並提供一些全域性的資源
      2. 一些繪製到螢幕上的“頁面”控制元件。
   如果大家熟悉Silverlight for Windows phone,知道這個入口主類就是Application,它訂閱並處理WP應用程式的生命週期事件,並定義系統資源。
   而這些頁面控制元件就是Silverlight for Windows phone應用程式中的PhoneApplicationPage。它定義了一個一個的頁面外觀。
   有了這個基礎,我們來看Cocos2D,我們發現它們的情形驚人的一致:CCApplication作為應用程式的入口,負責調控引擎的整個生命週期。而PhoneApplicationPage則對應cocos2d中的CCScene,是的,正如Wp應用程式每時每刻會顯示一個頁面一樣,cocos2d每時每刻會顯示一個CCScene 
 
   其實這也不奇怪,圖形應用程式大多是這樣的思路,只不過遊戲輪詢的模式更適應於遊戲頻繁的邏輯和狀態更新,而事件的模式適應於開發使用者輸入驅動的應用程式。
   所以,在cocos2d中,CCApplication主要做三件事情:
            1.    控制應用程式的生命週期
            2.    提供和管理一些全域性的資源
     3. 處理Touch
     4. 迴圈繪製介面
 
   應用程式的生命週期有一下幾個虛方法:
     /// <summary>
      /// 可以做一些簡單全域性變數的初始化工作,在DrawableGameComponent的Initialize方法中呼叫
      /// </summary>
     public override bool initInstance();
 
       /// <summary>
      ///  資源載入完成之後發生,在DrawableGameComponent的LoadContent方法末尾中呼叫
      /// </summary>
     public override bool applicationDidFinishLaunching()
  
     /// <summary>
     /// 程式進入後臺被掛起
     /// </summary>
     public override void applicationDidEnterBackground()
     /// <summary>
     /// 程式從後臺被喚醒 
     /// </summary>
     public override void applicationWillEnterForeground()
 
      這和Silverlight for Windows phone總的應用程式生命週期是類似的,不過注意的是目前的cocos2d-x for XNA中並沒有加入掛起和喚醒的方法呼叫,不過很簡單,你可以在Game1類的OnActivated和OnDeactivated中呼叫它們,下個版本修正這個問題。
 
另一個比較重要的變化是,CCApplication增加了一些XNA繪製相關的全域性屬性,包括:
     1.   ContentManager:用於管理資源的載入。
    2.    SpriteBatch:用於繪製2D的紋理。
    3.    WorldMatrix:當前著色器的世界矩陣。
    4.    ViewMatrix:當前著色器的檢視矩陣。
    5.   ProjectionMatrix:當前著色器的投影矩陣。
    6.   basicEffect:用來繪製元素的著色器。
   這些屬性主要用於繪製,它們會被CCSpriteCCSpriteBatchNode以及CCTextureAtlas等與繪製相關的類使用。如果你的遊戲中需要自己繪製2D或者3D的元素,也可以直接呼叫這些屬性進行繪製。

     第三個就是處理Touch事件,我們可以看到Update方法中就只有一個處理Touch的方法。實際上處理的是上一幀的Touch事件。
     第四個就是繪製介面,Draw做兩件有意義的事情:
        1. 重置攝像機位置和座標。(其實這裡也不是必須每幀都這麼做,因為後面我們看到CCNode的時候就會知道,每幀繪製完畢實際上會將這些矩陣變換還原,後續可以做一些優化)。
        2. 進入CCDirector的mainLoop迴圈。
 
        CCDirector的mainLoop就是整個遊戲的繪製過程了,我們以後會慢慢分析。
        現在,你明白CCApplication了嗎?歡迎討論。
 
        轉載自:www.0x003f.com
      
     歡迎加入QQ群:190784175(cocos2d-x for XNA開源社群),由cocos2d-x for XNA開發團隊建立

相關文章