cocos2d-x學習之場景切換

遊戲中經常會發現場景之間的切換,今天就來談談cocos2d-x是怎樣實現場景中的切換的。

好吧,還是用一個例子來說明一下;我們先來創建兩個不同場景

(ps:兩個場景的代碼差不多隻是背景圖片的不同,所以這裏就只寫出第一個場景的代碼)


scene_1.h:

#ifndef _SCENE_1_H_
#define _SCENE_1_H_

#pragma once
#include "cocos2d.h"

using namespace cocos2d;

class scene_1 : public CCLayer
{
public:
virtual bool init();
static cocos2d::CCScene* scene();
void ItemScene2Callback(CCObject* pSender);

CREATE_FUNC(scene_1);
};

#endif


scene_1.c:

#include "scene_1.h"
#include "scene_2.h"

//創建場景
CCScene scene_1::scene()
{
CCScene *scene = CCScene::create(); 
scene_1 *layer = scene_1::create();
scene->addChild(layer);
return scene;

}


//初始化
bool scene_1::init()
{
if ( !CCLayer::init() )
    {
        return false;
    }


CCSize size = CCDirector::sharedDirector()->getVisibleSize();

CCSprite *background = CCSprite::create("g.png");


background->setPosition(ccp(size.width/2,size.height/2));

this->addChild(background);

CCMenuItemImage *ItemScene2 = CCMenuItemImage::create( 
                                        "scene2Item.png",
                                        "scene2Item.png",
                                        this,
menu_selector(scene_1::ItemScene2Callback));//在按鈕回調函數中實現場景切換

ItemScene2->setPosition(ccp(100,100));
CCMenu *pMenu = CCMenu::create(ItemScene2,NULL);
        pMenu->setPosition(CCPointZero);
this->addChild(pMenu,0);

return true;
}


//點擊按鈕的回調函數

void scene_1::ItemScene2Callback(CCObject* pSender)
{
  //用replaceScene切換場景,是用參數裏的場景替換當前活動的場景
  CCDirector::sharedDirector()->replaceScene(scene_2::scene());
   /******************************************************************
  //跟上面的函數一樣,不過加多了一個場景切換的效果,切換效果有很多種,讀者可以自己去試試
  CCDirector::sharedDirector()->replaceScene(CCTransitionSlideInT::create(1, scene_2::scene());

  //用replaceScene是把當前活動場景壓入一個隊列,運行參數裏的場景;
  CCDirector::sharedDirector()->pushScene(scene_2::scene());
      
  //跟上面的函數一樣,也只是加多了場景切換效果
  CCDirector::sharedDirector()->pushScene(CCTransitionSlideInT::create(1, scene_2::scene());
  ***********************************************************************/

 }

如果scene_1中用的是pushScene壓入隊列的方式,那麼在scene_2中de 按鈕點擊回調函數就要注意了,可以用

 CCDirector::sharedDirector()->popScene();

從隊列中彈出scene_1繼續來運行從而實現場景切換;

這樣關於場景切換的小小實現就完成,希望對大家有幫助


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章