cocos2d-x 3.0 導演,場景,層,精靈

導演(Director)

      一款遊戲比如一部電影,只是遊戲具備更強的交互性,不過它們的基本原理是一致的。因此在Cocos2dx中把統籌遊戲大局的類抽象爲導演(Director),Director是整個cocos2dx引擎的核心,是整個遊戲的導航儀,遊戲中的一些經常使用操做就是由Director來控制的,好比OpenGL ES的初始化,場景的轉換,遊戲暫停繼續的控制,世界座標和GL座標之間的切換,對節點(遊戲元素)的控制等,還有一些遊戲數據的保存調用,屏幕尺寸的獲取等都要由Director類來管理控制的。由於Director是遊戲項目的總導演,會常常調用進行一些控制,因此該Director利用了單件設計模式,也就是項目裏取到的director都是同一個。
    得到導演類Director實例語句設計模式

         auto director = Director :: getInstance();
動畫

場景(Scene)

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

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

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

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

層(Layer)

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

        addChild( Node child ) addChild( Node child, int zOrder ) addChild( Node *child, int zOrder, int tag )對象

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

上圖所示的圖片中,叫作HelloWorldScene的場景中有三個不一樣層,在layer3層上又有上個不一樣的精靈。blog

下面是一個建立三個不一樣層的例子:遊戲

auto layer = LayerColor::create(Color4B(0, 128, 128, 255));
layer->setContentSize(CCSizeMake(120, 80));
layer->setPosition(Point(50, 50));
addChild(layer, 10);
auto layer1 = LayerColor::create(Color4B(128, 0, 128, 255));
layer1->setContentSize(CCSizeMake(120, 80));
layer1->setPosition(Point(100, 80));
addChild(layer1, 20);
auto layer2 = LayerColor::create(Color4B(128, 128, 0, 255));
layer2->setContentSize(CCSizeMake(120, 80));
layer2->setPosition(Point(150, 110));
addChild(layer2, 30);

  

精靈

Cocos2d中的精靈和其餘遊戲引擎中的精靈類似,它能夠移動,旋轉,縮放,執行動畫,並接受其餘轉換。Cocos2dx的Sprite由Texure,frame和animation組成,由openes負責渲染。 簡單過程可描述爲:使用Texture2D加載圖片,能夠用Texture2D生成對應的SpriteFrame(精靈幀),將SpriteFrame添加到Animation生成動畫數據,用Animation生成Animate(就是最終的動畫動做),最後用Sprite執行這個動做。事件

建立精靈的幾種方式:

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

在Cocos2dx中實現精靈顯示的基本過程以下:
    

//建立Scene
auto scene = Scene::create();
//建立層
auto layer = HelloWorld::create();
//把層加入場景中
scene->addChild(layer);
//建立一個精靈
auto sprite = Sprite::create("HelloWorld.png");
//把精靈加到層裏
layer->addChild(sprite, 0);

  

 轉自:http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/framework/native/v3/basic-concepts/zh.md
相關文章
相關標籤/搜索