【Cocos2d入門教程二】Cocos2d-x基礎篇

上一章已經學習了環境的搭建。這一章對基礎概念進行掌握。內容大概有:架構

1.導演函數

2.場景 學習

3.節點this

4.層spa

4.精靈code

 

1.導演(Director)視頻

導演存在的主要做用:對象

a.環境設定(幀率 初始化openGl和渲染器)blog

b.場景管理繼承

c.執行主循環

遊戲就是個死循環 不斷不斷的渲染  就跟視頻沒兩樣 一幀一幀的繪製出來  話說提一下一幀爲1/60秒  也就是說cocos2d裏一秒渲染60次

 

導演的管理:   計時器  事件管理器  動做管理器

導演繼承於REF  本質上就是一個單例類

 

得到導演類Director實例語句

1 auto director = Director :: getInstance();

 

 1 //調用第一個場景,當前不能有場景運行  
 2 void runWithScene(CCScene *pScene);  
 3   
 4 //場景入棧,當前必須有場景  
 5 void pushScene(CCScene *pScene);  
 6   
 7 //場景出棧,刪除當前場景,當前必須有場景  
 8 void popScene(void);  
 9   
10 //彈出全部場景,直至根場景  
11 void popToRootScene(void);  
12   
13 //彈出至指定場景  
14 void popToSceneStackLevel(int level);  
15   
16 //用新場景替代舊場景  
17 void replaceScene(CCScene *pScene);  
18   
19 //結束運行,釋放場景,必須手動調用  
20 void end(void);  
21   
22 //暫停場景  
23 void pause(void);  

 

 

2.場景(Scene)

Scene場景也是cocos2dx中必不可少的元素,遊戲中一般咱們須要構建不一樣的場景(至少一個),遊戲裏關卡、版塊的切換也就是一個一個場景的切換,就像在電影中變換舞臺和場地同樣。場景的一個重要的做用就是流程控制的做用,咱們能夠經過Director的一系列方法控制遊戲中不一樣的場景的自由切換。

下面是Director控制場景的經常使用方法:

  • runWithScene( Scene *scene ) 啓動遊戲,並運行scene場景。本方法在主程序第一次啓動主場景的時候調用。若是已有正在運行的場景則不能調用該方法;會調用pushScene-->startAnimation。
  • pushScene( Scene *scene ) 將當前運行中的場景暫停並壓入到代碼執行場景棧中,再將傳入的scene設置爲當前運行場景,只有存在正在運行的場景時才調用該方法;
  • replaceScene( Scene *scene ) 直接使用傳入的scene替換當前場景來切換畫面,當前場景被釋放。這是切換場景時最經常使用的方法。
  • popScene() 釋放當前場景,再從代碼執行場景中彈出棧頂的場景,並將其設置爲當前運行場景。若是棧爲空,直接結束應用。和PushScene結對使用
  • end() 釋放和終止執行場景,同時退出應用
  • pause() 暫停當前運行場景中的全部計時器和動做,場景仍然會顯示在屏幕上
  • resume () 恢復當前運行場景的全部計時器和動做,場景仍然會顯示在屏幕上

同時場景是層的容器,包含了全部須要顯示的遊戲元素。一般,當咱們須要完成一個場景時候,會建立一個Scene的子類,並在子類中實現咱們須要的功能。好比,咱們能夠在子類的初始化中載入遊戲資源,爲場景添加層,啓動音樂播放等等。

 

 

3.Node節點 

Cocos2d-x的核心類實例都是一個節點,這些類是以樹狀結構繼承的,他們的基類都是Node。

Node主要特徵,它能夠包含其餘繼承於Node節點例如層、精靈等,能夠設置按期回調函數,能夠執行動做。

Node繼承自Ref類。

 

 

4.層(Layer)

 Layer是的Node節點的子類。層包含的是直接在屏幕上呈現的內容,而且能夠接受用戶的輸入事件,包括觸摸,加速度計和鍵盤輸入等。咱們須要在層中加入精靈,文本標籤或者其餘遊戲元素,並設置遊戲元素的屬性,好比位置,方向和大小;設置遊戲元素的動做等。一般,層中的對象功能相似,耦合較緊,與層中游戲內容相關的邏輯代碼也編寫在層中,在組織好層後,只須要把層按照順序添加到場景中就能夠顯示出來了。要向場景添加層,咱們可使用addChild方法。

1 addChild( Node child )
2 addChild( Node child, int zOrder ) 
3 addChild( Node *child, int zOrder, int tag )

 其中,Child參數就是節點。對於場景而言,一般咱們添加的節點就是層。先添加的層會被置於後添加的層之下。若是須要爲它們指定前後次序,可使用不一樣的zOrder值。tag是元素的標識號碼,若是爲子節點設置了tag值,就能夠在它的父節點中利用tag值就能夠找到它了。層能夠包含任何Node做爲子節點,包括Sprites(精靈), Labels(標籤),甚至其餘的Layer對象。

 

 

5.精靈(Sprite)

 建立精靈的幾種方式:

  • 直接建立:
    1 auto sprite = Sprite::create("HelloWorld.png");      
    2 this->addChild(sprite,0);
  • 使用紋理來建立精靈
    1 auto sprite1 = Sprite::createWithTexture(TextureCache::getInstance()>addImage("HelloWorld.png"));
    2 this->addChild(sprite1, 0);
  • 使用精靈幀來建立精靈
    1 auto sprite2=Sprite::createWithSpriteFrameName("HelloWorld.png"); 
    2 this->addChild(sprite2, 0);

 

精靈建立的過程:

 

 1 //建立Scene
 2 auto scene = Scene::create();
 3 //建立層
 4 auto layer = HelloWorld::create();
 5 //把層加入場景中
 6 scene->addChild(layer);
 7 //建立一個精靈
 8 auto sprite = Sprite::create("HelloWorld.png");
 9 //把精靈加到層裏
10 layer->addChild(sprite, 0);

 

 

精靈建立的底層源碼(這部分若是看不懂的能夠忽略過):

 從精靈幀中尋找這個圖片,若是找不到則編譯器會直接崩掉

 

下面爲四者關係的基本架構圖:

 

 

對剛開始感受有點不理解也實屬正常,先大致知道它們的主要是什麼就好了。後來慢慢的會了解 。

相關文章
相關標籤/搜索