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
:用來繪制元素的着色器。
第三個就是處理Touch事件,我們可以看到Update方法中就只有一個處理Touch的方法。實際上處理的是上一幀的Touch事件。
這些屬性主要用於繪制,它們會被
CCSprite
,
CCSpriteBatchNode
以及
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開發團隊創建