Cocos2D-XNA入門篇

pamxy發表於2013-11-10

轉自:http://blog.csdn.net/fsafs168/article/details/7995601

首先,確定你安裝了windows Phone SDK,已經可以開發WP應用。然後,我們安裝Cocos2D-xna(下載地址:http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Download)(轉者注:我在這裡找到了下載地址- http://www.cocos2d-x.org/news/53https://github.com/cocos2d/cocos2d-x-for-xna/。在官網,還有幫助文件可以看,不過其中類庫函式的解釋實在是慘不忍睹、、、、、、

         好了,廢話不多說。下載下來之後,點選install-template-mscs.msi進行安裝,然後用VS開啟編譯執行,這裡面有個test案例,沒事的時候可以研究研究。這下子就安裝完畢咯,你再開啟VS的新建專案時候就能看到多了一個cocos2d-x的選項。不過我們暫時不用它,因為其自動生成的程式碼比較複雜。不適合初學者學習。接下來,我們這樣做。

         首先,新建一個XNA,WINDOWSPHONE 遊戲專案。在其中引用cocos2d-xna.dll,在這裡需要自行編譯一個cocos2d-x XNA的dll。這個DLL就是我們之前下載安裝之後編譯執行生成的一個DLL。在那個工程檔案中找一下就能找到。

        

(DLL引用,它的位置在編譯之後的目錄下.\cocos2d-x-for-xna-0.1.0\cocos2d-xna\bin\Windows Phone\Debug)


         現在我們修改一下Game1.cs檔案中的程式碼,將應用程式的管理交給COCOS2D,新增的程式碼如下:

         新增引用:usingcocos2d;    //所有的cocos2d的類都在這裡

         新增屬性: CCApplication application; //每一個cocos2d遊戲都需要這麼一個例項化的類進行對應用的管理。而且這個類我們需要繼承它寫一個子類,暫時叫做MyApplication

    在建構函式中新增如下程式碼:

    application = new MyApplication(this,graphics);

     this.Components.Add(application);

然後對Game1.cs檔案的修改就完成咯,現在需要我們去寫MyApplication類了。

         為了方便,新建一個資料夾叫做Classes,然後在其中新建一個類MyApplication我們寫的類都放在這裡,這個類的程式碼如下:

         

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using cocos2d;  
  6. using Microsoft.Xna.Framework;  
  7.    
  8. namespace HelloWorld.Classes  
  9. {  
  10.     class MyApplication : CCApplication  
  11.     {  
  12.         publicMyApplication(Game game,GraphicsDeviceManager graphics)  
  13.             : base(game,graphics)  
  14.         {  
  15.             CCApplication.sm_pSharedApplication=this;  
  16.             this.setOrientation(Orientation.kOrientationPortrait); //設定為豎屏,資料來源官網文件  
  17.         }  
  18.    
  19.         ///<summary>  
  20.         /// Implement for initialize OpenGL instance, set source path,etc...  
  21.         ///初始化OpenGL例項,設定原始碼路徑等等  
  22.         ///說白了就是初始化應用程式函式,覆蓋一下就好,不用寫什麼  
  23.         ///</summary>  
  24.         public override boolinitInstance()  
  25.         {  
  26.             returnbase.initInstance();  
  27.         }  
  28.    
  29.         ///<summary>  
  30.         /// 實現 CCDirector 和 CCScene 的初始化.  
  31.         ///</summary>  
  32.         ///<returns>  
  33.         ///  true 初始化成功  
  34.         ///  false初始化失敗  
  35.         ///</returns>  
  36.         public override boolapplicationDidFinishLaunching()  
  37.         {  
  38.             //初始化 director  
  39.             CCDirectorpDirector =CCDirector.sharedDirector();  
  40.             pDirector.setOpenGLView();  
  41.    
  42.             //設定成 FPS顯示  
  43.             pDirector.DisplayFPS = true;  
  44.    
  45.             // 設定FPS動畫重新整理值,無特殊要求的話預設設定為1.0/60  
  46.             pDirector.animationInterval = 1.0 /60;  
  47.    
  48.             // 建立一個畫面  
  49.             CCScenepScene = new MainMenu();  
  50.    
  51.             // 將畫面加入棧  
  52.             pDirector.runWithScene(pScene);  
  53.    
  54.             returntrue;  
  55.         }  
  56.    
  57.         ///<summary>  
  58.         ///在應用程式進入後臺時,呼叫這個函式  
  59.         ///</summary>  
  60.         public override voidapplicationDidEnterBackground()  
  61.         {  
  62.             CCDirector.sharedDirector().pause();  
  63.    
  64.             // if youuse SimpleAudioEngine, it must be pause  
  65.             //SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();  
  66.         }  
  67.    
  68.         ///<summary>  
  69.         ///當應用程式從後臺回到前臺時,呼叫這個函式  
  70.         ///</summary>  
  71.         public override voidapplicationWillEnterForeground()  
  72.         {  
  73.             CCDirector.sharedDirector().resume();  
  74.    
  75.             // if youuse SimpleAudioEngine, it must resume here  
  76.             //SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();  
  77.         }  
  78.     }  
  79. }  

         這裡面最重要的一個類是CCDirector 你可以把它當然是一個堆疊,使用它主要是使用它所帶的靜態函式。那麼它是做什麼的呢?我們一個程式中可能有很多介面、畫面需要處理。而cocos2d就是依靠這個類來管理它們的出現順序的。而且是以堆疊的方式,也就是說在棧頂的位置的畫面,就是使用者所能看到的畫面。而這個畫面在cocos2d中是依靠CCScene這個類來實現的,也就是說一個CCScene類就是一個畫面,它們統一由CCDirector管理,其中處於棧頂的畫面是使用者所能看到的畫面。

         小腦袋瓜還受的了麼?我們終於到了最後一個步驟了,就是在畫面上顯示一行字。我呢為了以後方便,直接使用選單的方式實現了這個。看到MyApplication裡的CCSceneMainMenu類了麼?我們現在實現它!程式碼如下:

        

[csharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Linq;  
  4. using System.Text;  
  5. using cocos2d;  
  6.    
  7. namespace HelloWorld.Classes  
  8. {  
  9.     class MainMenu : CCScene  
  10.     {  
  11.         public MainMenu()  
  12.         {  
  13.             CCMenuItemFonthello =CCMenuItemFont.itemFromString("Hello World");  
  14.             CCMenumenu = CCMenu.menuWithItems(hello);  
  15.             this.addChild(menu);  
  16.         }  
  17.     }  
  18. }  

    這裡的CCMenuItemFont類代表是一個文字內容的選單按鈕,而CCMenu類則是它的容器,最後把他們放在外面這個畫面裡即可顯示咯this.addChild(menu);

最後我們別忘了在Game1.cs中引用我們剛才那個資料夾下的類using HelloWorld.Classes;然後,我們還需要建立一個字型,在Content/fonts/下,建立一個叫Arial.spritefont的文字描述XML。這一步只需要用VS自動生成的即可,如果想顯示中文的話,那可是個麻煩事。。。。。


好了,現在執行我們的程式吧!


原始碼下載地址:http://pan.baidu.com/share/link?shareid=63317&uk=3792135684


相關文章