cocos2d-x 基本概念的學習

cocos2d-x 基本概念的學習

基本元素

  • 咱們把內容相對不變的遊戲元素成爲場景,遊戲在場景之間的切換稱爲流程控制CCScene
  • 是場景之下的遊戲元素。CCLayer
  • 精靈屬於層,是場景中的課件圖形。如主角。CCSprite
  • 節點渲染樹CCNode

一旦創建起渲染樹,組織複雜的場景就變得十分簡單。咱們賦予每一個節點一系列屬性,包括節點相對於父節點的位置、旋轉角度、縮放比例、和變形參數等。咱們只須要考慮節點相對於父節點的屬性,就能夠建立複雜的對象或者動做。(這麼說的話,實現血條也就能夠用這個方法)函數

  • 動做動畫。動做:CCAction CCActionInterval CCActionInstant。動畫:幀。使用多個動畫幀建立動畫序列。 CCAnimation, 用幀動畫序列建立可做用於精靈的幀動畫。 CCAnimate

###命名空間和類名稱### 咱們能夠發現USING_NS_CC-----<code>#define USING_NS_CC using namespace cocos2d</code>學習

###構造函數和初始化### Cocos2d-x中和C++有點區別:動畫

  1. Cocos2d-x它全部的對象都建立在堆上,而後經過指針引用
  2. 建立Cocos2d-x對象一般有兩種方法,一種是首先使用new操做符建立一個未初始化的對象,而後調用init系列方法來初始化。第二種是使用靜態的工廠方法直接建立以惡對象。

使用構造函數建立的對象有使用者負責釋放。使用工廠方法建立的對象則不須要。this

// example 
CCSprite *sprite = new CCSprite();
sprite->initWithFile("*.jpg");
// 第二種使用工廠方法
// example
CCSprite* sprite = CCSprite::spriteWithFile("HelloWorld.png");//舊版本引擎
CCSprite* sprite = CCSprite::create("HelloWorld.png");//新版本引擎
  1. 選擇器

<pre><code> shedule_selector(SELECTOR); menu_selector(SELECTOR); //usage CCMenuItemImage *pCloseItem = CCMenuItemImage::Create( "CloseNormal.png", "CloseSelected.png", this, menu_selector(HelloWorld::menuCloseCallback) ); </code></pre>spa

###單例### Cocos2d-x的遊戲控制器CCDirector是一個獨一無二的控制器,用於切換遊戲場景。不可能同時存在CCDirector的實例。指針

<pre><code> static CCDisplayLinkDirector s_SharedDirector; CCDirector* CCDirector::sharedDirector(void) { static bool s_bFirstUseDirector = true; if (s_bFirstUseDirector) { s_bFirstUseDirector = false; s_ShareDirector.init(); } return &s_ShareDirector; } CCDirector::sharedDirector()->replaceScene(newScene);//經過調用replaceScene()來切換到新場景。 </code></pre>code

##Cocos2d-x的只能內存管理技術##orm

實際上這跟Objective-c的風格一致對象

  1. 引用計數

經過給每一個對象維護一個 引用計數器,記錄該對象當前被引用的次數。對象增長一次引用時,計數器加1。當引用計數爲0時,標誌着該對象的生命週期結束,自動觸發對象的回收釋放。(可是必須注意維護計數)生命週期

經過retainCount()方法得到對象當前的引用計數值。在對象經過構造函數建立的時候,該引用值被賦值爲1。在其它地方須要引用對象時,咱們會調用retain()方法,令其引用計數+1,表示獲取該對象的引用權;在引用結束的時候調用release()方法,令其引用計數-1,表示釋放該對象的引用權。

還有一個方法是autorelease(),起做用時將對象放入自動回收池(CCAutore-leasePool)。當回收池自身被釋放的視乎,他就會對池中的全部對象執行一次release()方法,再循環結束後釋放回收池。*因此,即便咱們沒有手工建立和釋放回收池,每一幀結束的時候,自動回收池中的對象也都會被執行一次release()方法。

<pre><code> fish = new CCSprite(); fish->init(); // 1 // CCLog("%d", fish->retainCount()); // 能夠獲得當前計數的值 fish->retain(); // 2 fish->release(); // 1 fish->autorelease(); // 1 </code></pre>

回收池管理器 CCPoolManager* 的push(),pop()操做:建立和釋放回收池。

<pre><code> CCPoolManage::sharedPoolManage()->push(); for(int i=0; i<n; i++) { CCString *dataItem = CCString::createWithFormat("%d", Data[i]); stringArray->addObject(dataItem); } CCPoolManage::sharedPoolManage()->pop(); </code></pre>

  1. 垃圾回收
相關文章
相關標籤/搜索