第一部分 | 第1章 —— Hello Cocos2d-x


在這一章中,咱們將與全部程序設計入門書同樣,從Hello World這個最簡單的例子開始介紹Cocos2d-x引擎。首先介紹一下Cocos2d-x的概況;而後搭建Windows下的開發環境,並動手實踐第一個Hello World程序;接着分析Cocos2d-x程序的的基本結構;最後展現了各類例子。node



起源:Cocos2d-x的原型是Cocos2d,一個最先來源於幾位Python開發者在PyWeek競賽中的做品。目的是封裝底層繪圖代碼,簡化2D遊戲的開發過程,避免每次都「重複發明輪子」。有了Cocos2d開發者就能夠沒必要關心繪圖的細節,把所有精力集中在遊戲開發上。最先發佈於2008年4月,並一直保持版本的的更新。編程

發展:在Cocos2d發佈的同年3月,蘋果發佈了iOS的SDK,容許第三方開發者爲iOS設備開發各類應用,其中游戲應用是最熱門的。爲了簡化蘋果遊戲的開發難度,把你們從複雜的OpenGL編程中解救出來,Ricardo Quesada將Cocos2d從Python移植到了iOS上,並使用iOS的原生語言Object-C重寫了遊戲引擎。2008年11月,Cocos2d-iPhone引擎正式開源,發佈了0.1版,爲2D遊戲的開發提供了一種便利的解決方案。隨着蘋果手機的大流行,Cocos2d-iPhone引擎也在逐步的完善,這得益於社區內世界各地的開發者們的貢獻,而且發展速度大大超過了Python版本。因爲Cocos2d的易用性,使用Cocos2d-iPhone開發的遊戲數量也日漸增多,至今已經有2500多個遊戲在App Store上架。讓咱們來膜拜一下Ricardo Quesada大神,感謝他爲遊戲行業所作的貢獻。
app

興盛:因爲Android異軍突起,大大帶動了移動端的遊戲市場,也由此產生了一個迫切的需求,即開發者須要將遊戲同時部署在兩個熱門的平臺上,可是一個遊戲維護兩套代碼的代價顯然是很是昂貴的,尤爲是兩個平臺的主流語言、主流引擎都徹底不一樣的狀況下。所以,基於C++語言,以Cocos2d-iPhone爲基礎開發的Cocos2d-x出現了,它憑藉其從語言到接口的跨平臺特性,受到了遊戲開發者的普遍關注。使用Cocos2d-x開發的遊戲已經能夠作到了「代碼通用」,只須要少許的調整,就能夠移植到包括iOS、Android、Windows、Linux在內的諸多平臺。函數

歷程:Cocos2d(Python) -> Cocos2d-iPhone(Object-C) -> Cocos2d-x(C++)學習

本質:讓我來用一句話歸納,Cocos2d-x對SDK進行了封裝、抽象、和擴展。它其實就是一個跨平臺的圖形引擎,它封裝了複雜的圖形接口,經過抽象出精靈、動做等概念,下降了遊戲開發的難度,簡化了開發過程。同時Cocos2d-x還進行了不少擴展,包括一套Object-C風格的基礎類系、平臺無關的多點觸摸協議、重力感應和音頻系統等。測試

特性:下面簡單的介紹一下Cocos2d-x的11個特性。優化

特性 描述
流程控制flow control 很是容易管理不一樣場景(Scene)之間的流程控制。
精靈sprite 快速完方便的精靈用於顯示一切可見的元素。
節點node 基於樹結構的分層組織方式,方便管理不一樣層次的遊戲元素,同時提供了統一管理的計時器(scheduler)。
動做action 應用於精靈或其餘遊戲元素的動畫效果,能夠組合成複雜的動做。如移動(move)、旋轉(rorate)和縮放(scale)等。
特效effect 包括波浪(wave)、旋轉(twirl)和透鏡(lens)等視覺特效。
平面地圖tiled map 支持矩形和六邊形的平面地圖。
菜單menu 建立遊中經常使用的菜單。
用戶輸入 提供接受用戶觸摸事件、傳感器(如加速度計)等輸入的簡單解決方案。
文檔document 編程指南、API參考、視頻教學以及不少簡單可靠的測試樣例。
MIT許可 免費開發的協議,可是請謹記尊重版權。
基於OpenGL 深度優化的繪圖方式,支持硬件加速。



使用Cocos2d-x最大的便利就是能夠在PC或Mac環境下完成遊戲開發,而後再移植到移動設備上,如今以Windows開發平臺爲例來說解一下環境的搭建。動畫

第一步:安裝Windows系統和Visual Studio 2010。我用的是Windows 10專業工做站版。設計

第二步:找到cocos2d-2.0-x-2.0.4安裝包。若是找不到能夠發封郵件給我,但我不必定回覆。3d

第三步:找到cocos2d-2.0-x-2.0.4目錄下的install-templates-msvc.bat運行,安裝VS模板,成功後下如圖

第四步:找到cocos2d-2.0-x-2.0.4目錄下的cocos2d-win32.vc2010.sln雙擊打開,編譯Cocos2d-x解決方案

第五步:把解決方案中的HelloCpp設爲啓動項目後運行,若是出現下圖則成功了,到此環境搭建完成。



完成開發環境的搭建後,咱們來嘗試動手建立人生中的第一個Cocos2d-x項目吧,也就是Hello World,具體步驟以下

第一步:打開VS選擇Cocos2d-x模板,選擇Cocos2d-win32 Application項目,名稱爲「HelloCocos」,點肯定後再點Finish。

第二步:直接編譯是會出錯的,由於缺乏不少頭文件和庫文件,最簡單的方法就是把整個Cocos2d-x目錄裏的文件複製過來。

第三步:不用作任何修改,直接編譯運行項目,一次經過會顯示下面圖片就成功了,這就是咱們的小不點出來了。

第四步:已經沒有第四步了,但咱們永遠也不要中止學習的腳步,如今我來給它加個標籤顯示「Hello Cocos」。

在HelloWorldScene.cpp文件中加入上面的三行代碼便可實現想要的效果。這是一個最簡單的類標籤類CCLabelTTF。



這一節用文字描述的比較多,我儘可能用簡單的語言講清楚,若是一件事講不清楚,說明我尚未理解透徹,下面要學習文件夾和文件、類和成員函數。

Hello World —— 文件夾和文件

resource文件夾:用於存放遊戲的圖片、音頻和配置等資源文件,默認爲遊戲運行時的目錄,當前共有五個資源文件,其中HelloCocos.rc爲Windows專有,其他都是圖片。

include文件夾:遊戲定義的頭文件都存放在這個目錄裏,共有四個頭文件,main.h和resource.h是平臺相關文件爲Windows專有,在不一樣的平臺下是不一樣的。AppDelegate.h和HelloWorldScene.h是AppDelegate和HelloWorld兩個類的定義文件,具體這兩個類可參考下面的詳細解釋。

source文件夾:遊戲的源代碼都存放在這個目錄裏,共有三個源文件,main.cpp是平臺相關文件爲Windows專有,在不一樣的平臺下是不一樣的。AppDelegate.cpp和HelloWorldScene.cpp是兩個類的實現文件。Cocos2d-x的遊戲結構能夠簡單的歸納爲場景、層、精靈。AppDelegate.cpp中定義了AppDelegate這個類,它是程序的入口,管理遊戲的生命週期。在HelloWorldScene.cpp中定義了一個HelloWorld類,該類公有繼承自CCLayer,所以它是一個層,只不過這個層中帶有一個靜態成員函數能夠建立一個場景,但HelloWorld並非場景類。層能夠加到入場景,但場景不能加到入層裏,這一點須要注意一下。

Hello World —— 類和成員函數

AppDelegate:公有繼承於CCApplication,我喜歡管這個類叫奧力給,它是Cocos2d-x項目的程序入口文件,控制着遊戲的生命週期,除去構造函數和析構函數外共有3個方法。

AppDelegate::applicationDidFinishLaunching:應用程序啓動後將調用這個方法,這段代碼首先對引擎進行必要的初始化,整個遊戲有且只有一個pDirector,它是導演,製做遊戲和拍電影同樣,全部的事情都歸導演管一我的管理。而後開啓FPS即每秒幀率,而後設置繪製間隔爲每秒在屏幕上顯示60張圖片,通常每秒顯示23張圖片人眼就不會感受到卡頓了。最後建立了一個Hello World場景,並告訴導演運行這個場景,對於遊戲開發者,在告訴導演運行場景以前,要把全部的初始化工做都完成。

AppDelegate::applicationDidEnterBackground:當你正玩着遊戲的時候,忽然來了一個重要電話,此時能夠先把遊戲切到後臺接個電話,這時候就產生了一個事件,回調這個成員函數,它自己不會本身運行,而是由於被玩家或系統切換到後臺的時候回調的。遊戲開發者至關於總監,讓導演來無條件執行各類工做,具體工做由導演去作。

AppDelegate::applicationWillEnterForeground:這個函數也是一個事件的回調函數,當從後臺切換回來繼續玩遊戲的時候,就產生了一個事件,回調這個成員函數,試想一下,你掛斷了電話還想繼續遊戲,那麼就得把遊戲從後臺切換回來。

HelloWorld:公有繼承於CCLayer,是層的一個子類,因此這個類也是一個層。在Cocos2d-x中,場景和層都是不可見的遊戲元素,只有精靈纔是可見的。

HelloWorld::scene:建立並返回一個場景指針,有趣的是它卻位於一個CCLayer的派生類中,在Cocos2d-x中,在層下設置一個建立場景的靜態函數是一個常見的技巧,這樣作的便利是咱們能夠直接使用這個層的靜態函數scene()來建立一個空場景,而後再把層放到這個空場景中。

HelloWorld::create:咱們並無看到這樣的成員函數,實際上是用CREATE_FUNC(HelloWorld)宏來實現的。Cocos2d-x的源代碼是由Object-C改過來的,因此也保留了不少iOS的編程風格,它並無像C++那樣使用構造函數來初始化這個類,而是使用create()和init()來完成類的構造函數。

HelloWorld::menuCloseCallback:這個成員函數是selector的回調函數。也就是當咱們點了關閉以後要執行的動做。

HelloWorld::init:這個成員函數分爲五個部分(初始化、建立菜單項、建立菜單、建立標籤、建立背景)。首先調用父類的函數初始化層;其次建立一個有圖標的菜單項;而後又建立了一個菜單,並使用上一步建立的菜單項;接着建立一個標籤用來顯示「Hello World」;最後建立一個背景圖片。全部上面建立的對象都須要加入到層中才能最終顯示出來。addChild把遊戲元素加進來,它的第二個參數值越大表示顯示的越靠前,最底層爲0。setPosition用來設置位置,左下角爲座標原點。



Cocos2d-x在開發過程當中爲了測試引擎的正確性,同時爲了演示引擎各個部分如何使用爲咱們提供了大量的示例,這些例子展現了Cocos2d-x引擎的不少標準用法,幾乎涵蓋了引擎的所有功能,頗有參考價值。把源碼中的TestCpp項目設爲啓動項,左邊是TestCpp運行後的效果,右邊是第一個例子Actions Test。



第1節主要講述了Cocos2d-x的起源、發展、興盛和特性,從本質上說Cocos2d-x就是一個圖形引擎,它是對SDK的封裝、抽象和擴展,讓開發者從複雜和枯燥的API編程中解放出來,這很像微軟的MFC類庫。

第2節教咱們如何搭建開發環境,若是一點也不懂C++或者不能運行HellCpp請不要繼續往下看了,這本書不適合你,先學學C++再看吧,由於全書都在教你如何使用各類類。這個版本大約有500多個類,而Cosos2d-x大量的使用單類。

第3節只要咱們按照步驟一步一步的進行,就能夠建立出咱們第一個Cocos2d-x項目,同時也簡單的使用了第一個類CCLabelTTF,全部的Cocos2d-x類都是以CC開頭的,也許是Cocos2d-x的縮寫,也許是Cocos2d-x Class的首字母。

第4節詳細的介紹了每個文件夾、文件、類和成員函數,特別是在成員函數上作了詳細的解釋,由於每個Cocos2d-x項目都包含這些。任何能夠呈現出來的都叫遊戲元素,場景和層是不可見的遊戲元素,全部可見的遊戲元素都叫精靈,全部的遊戲元素都歸惟一的導演管,製做遊戲和拍電影很像,開發者就是總監,CCDirector就是導演。

第5節是觀賞課,讓咱們看看Cocos2d-x能作出什麼樣的效果出來,這裏一方面爲了測試引擎各部分功能,一方面是教咱們引擎的標準用法。

實戰:不動手等於白學,建立第一個Cocos2d-x項目Hello Cocos並運行成功纔算是本章通關了。

總結:本章的信息量很大,涉及的類有CCApplication、CCDirector、CCScene、CCLayer、CCMenuItemImage、CCMenu、CCLabelTTF、CCSize、CCSprite、CCObject、CCEGLView、SimpleAudioEngine,除了這些類一有一些宏和類的成員函數調用。暫時先沒必要糾結於這些函數的具體用法細節,本章的重心就是動手能作出一個Hello Cocos就行。
相關文章
相關標籤/搜索