cocos2d學習之旅(二)

學習了前邊的scene layer 等等的知識以後,我們已經對cocos2d有了一個大致的瞭解和初步的認識,這次我們來學習cocos2d的場景跳轉。經過前邊的講解,我就省略掉一些簡單的過程。

首先,我們先建立一個新的cocos2d的項目ReplaceScene,由於建立的時候默認有了一個HelloWorld的場景,要實現場景跳轉,我們需要至少兩個場景,因此我們再建立一個場景,建立場景的知識上一篇已經提及過了,在此就不贅述了。

首先,我們先寫.h文件


#ifndef __SecondScene_H__
#define __SecondScene_H__
#include "cocos2d.h"

using namespace cocos2d;
class SecondScene :public Layer{
public:
	static Scene* createScene();
	virtual bool init();
	CREATE_FUNC(SecondScene);
};

#endif

接下來不用說也知道,我們來寫cpp文件


#include "SecondScene.h"
Scene* SecondScene::createScene(){
	auto scene = Scene::create();
	auto layer = SecondScene::create();
	scene->addChild(layer);
	return scene;
}

bool SecondScene::init(){
	Label* label = Label::create("Hi,are you mutou?", "Arial", 100);
	label->setPosition(ccp(450, 450));
	this->addChild(label);
	return true;
}

至此,我們就建立好了第二個場景,接下來我們要做的就是場景的切換。跑過第一個程序的都知道,在右下角有一個按鈕,按下那個按鈕之後應該就進行場景跳轉。我們應該修改HelloWorld的menuCloseback函數,這個是關閉按鈕的回調函數,點擊按鈕就會自動調用這個回調函數,因此我們要改變這個函數,在這個函數裏實現場景跳轉。


void HelloWorld::menuCloseCallback(Ref* pSender)
//切換場景
{
   // Director::getInstance()->end();
	Director::getInstance()->replaceScene(
	//切換時的動畫
	TransitionJumpZoom::create(3.0f, SecondScene::createScene()) );

	

#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    exit(0);
#endif
}

其中TransitionJumpZoom是轉換場景時的動畫效果,還有很多種炫酷的效果就不一一列舉了,有興趣的可以去官網自己看看。


除了調用replaceScene這個函數以外,還有另一種方式,那就是PushPopScene. push和pop正如大家所想的一樣,類似於壓棧和出棧,就是說老的場景不會在內存中被釋放掉對比上一種方法,上一種方法會被內存釋放掉舊的場景,pushScened的作用就是用新的場景覆蓋當前的場景,當前的場景被暫停但是不會被釋放掉,也就是說我們用這個可以 跳轉回到原來的場景,而不用再新建一個場景,因此我們需要在跳轉到的場景上加一個按鈕用來進行回跳,此時我們關注init函數,在函數內加上這樣一段代碼,我們就加上了一個按鈕

//添加按鈕
	MenuItem * pCloseItem = MenuItemImage::create(
		"CloseNormal.png", "CloseSelected.png", this, menu_selector(SecondScene::popScene)
		);
	pCloseItem->setPosition(ccp(Director::getInstance()->getWinSize().width -20,20));
	Menu* pmenu = Menu::create(pCloseItem, NULL);
	pmenu->setPosition(Point(0, 0));
	this->addChild(pmenu, 1);

我們還需要新建一個popScene函數來回調上一個場景,代碼像這樣:

void SecondScene::popScene(Ref* pSender){
	Director::getInstance()->popScene();
}

要注意在.h文件中加上這個函數的函數頭

像這樣我們就可以進行場景來回來去的自由跳轉了,雖然pushpop在彙編語言非常的常用,但是在實際的cocos2d開發中使用的還是很少的,因爲類似這種的需求我們多可以用layer來代替實現,而並不用切換場景這麼麻煩。

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