TransitionsTest.h 文件:
有一個場景類TransitionsTestScene,還有兩個佈景層類TestLayer1、TestLayer2。
在主菜單選擇了TransitionsTest菜單項後,首先運行以下代碼,從默認的場景切換到“場景切換示例的場景”來:
void TransitionsTestScene::runThisTest()
{
CCLayer * pLayer = new TestLayer1();
addChild(pLayer);
pLayer->release();
CCDirector::sharedDirector()->replaceScene(this);
}
調用佈景層1的構造函數,在佈景層中加入一個背景圖片、Label文字、三個切換菜單項,代碼如下:TestLayer1::TestLayer1(void)
{
float x,y;
CCSize size = CCDirector::sharedDirector()->getWinSize();
x = size.width;
y = size.height;
CCSprite* bg1 = CCSprite::create(s_back1);
bg1->setPosition( ccp(size.width/2, size.height/2) );
addChild(bg1, -1);
CCLabelTTF* title = CCLabelTTF::create( (transitions[s_nSceneIdx]).c_str(), "Thonburi", 32 );
addChild(title);
title->setColor( ccc3(255,32,32) );
title->setPosition( ccp(x/2, y-100) );
CCLabelTTF* label = CCLabelTTF::create("SCENE 1", "Marker Felt", 38);
label->setColor( ccc3(16,16,255));
label->setPosition( ccp(x/2,y/2));
addChild( label);
// menu
CCMenuItemImage *item1 = CCMenuItemImage::create(s_pPathB1, s_pPathB2, this, menu_selector(TestLayer1::backCallback) );
CCMenuItemImage *item2 = CCMenuItemImage::create(s_pPathR1, s_pPathR2, this, menu_selector(TestLayer1::restartCallback) );
CCMenuItemImage *item3 = CCMenuItemImage::create(s_pPathF1, s_pPathF2, this, menu_selector(TestLayer1::nextCallback) );
CCMenu *menu = CCMenu::create(item1, item2, item3, NULL);
menu->setPosition( CCPointZero );
item1->setPosition(ccp(VisibleRect::center().x - item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
item2->setPosition(ccp(VisibleRect::center().x, VisibleRect::bottom().y+item2->getContentSize().height/2));
item3->setPosition(ccp(VisibleRect::center().x + item2->getContentSize().width*2, VisibleRect::bottom().y+item2->getContentSize().height/2));
addChild(menu, 1);
schedule( schedule_selector(TestLayer1::step), 1.0f);
}
當我們按下向右或向左的菜單項後,就會調用下面的回調函數,進行場景的切換,代碼如下:
void TestLayer1::nextCallback(CCObject* pSender)
{
s_nSceneIdx++;
s_nSceneIdx = s_nSceneIdx % MAX_LAYER;
CCScene* s = new TransitionsTestScene();
CCLayer* pLayer = new TestLayer2();
s->addChild(pLayer);
CCScene* pScene = createTransition(s_nSceneIdx, TRANSITION_DURATION, s);
s->release();
pLayer->release();
if (pScene)
{
CCDirector::sharedDirector()->replaceScene(pScene);
}
}
上面代碼的執行過程:
(1)創建新場景、佈景層
(2)將佈景層放入場景中
(3)包裝創建的新場景,增加切換效果
(4)替換場景。
OK,如果正常點寫切換場景這個效果的話,是這麼寫的:
CCScene* s = new CCScene();
testLayer* pLayer = new testLayer();
s->addChild(pLayer);
pLayer->release();
if (s)
{
CCDirector::sharedDirector()->pushScene(CCTransitionSlideInT::create(2,s));
}
我這寫法也有點戳~ 寫法有千奇百怪,但執行過程都是這些。123按順序來。
最後,注意一點,pushScene只是將新場景放到棧頂,顯示出來,舊場景依然存在(在內存中),所以一般是使用replaceScene。
沒有最好的方法,只有最適合的方法,所以實際情況,自己把握咯~