好吧,還是用一個例子來說明一下;我們先來創建兩個不同場景
(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繼續來運行從而實現場景切換;
這樣關於場景切換的小小實現就完成,希望對大家有幫助