cocos2d-x 3.0 導演,情境,層,精靈

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   io   資料   

導演(Director)

      一款遊戲好比一部電影,只是遊戲具有更強的互動性,不過它們的基本原理是一致的。所以在Cocos2dx中把統籌遊戲大局的類抽象為導演(Director),Director是整個cocos2dx引擎的核心,是整個遊戲的導航儀,遊戲中的一些常用操作就是由Director來控制的,比如OpenGL ES的初始化,情境的轉換,遊戲暫停繼續的控制,全局座標和GL座標之間的切換,對節點(遊戲元素)的控制等,還有一些遊戲資料的儲存調用,螢幕尺寸的擷取等都要由Director類來管理控制的。因為Director是遊戲項目的總導演,會經常調用進行一些控制,所以該Director利用了單件設計模式,也就是項目裡取到的director都是同一個。
    獲得導演類Director執行個體語句

         auto director = Director :: getInstance();

情境(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的子類,並在子類中實現我們需要的功能。比如,我們可以在子類的初始化中載入遊戲資源,為情境添加層,啟動音樂播放等等。

層(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層上又有上個不同的精靈。

下面是一個建立三個不同層的例子:

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中實現精靈顯示的基本過程如下:
    

//建立Sceneauto 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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.