程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> Cocos2d-x UI開辟之場景切換代碼實例

Cocos2d-x UI開辟之場景切換代碼實例

編輯:關於C++

Cocos2d-x UI開辟之場景切換代碼實例。本站提示廣大學習愛好者:(Cocos2d-x UI開辟之場景切換代碼實例)文章只能為提供參考,不一定能成為您想要的結果。以下是Cocos2d-x UI開辟之場景切換代碼實例正文


cocos2d-x中的場景切換是經由過程導演類挪用響應的辦法完成的,可以經由過程CCDirector::sharedDirector()->replaceScene()辦法切換場景,參數是要切換的新場景,這類辦法會釋放失落舊的場景。經由過程pushScene()切換則是將舊的場景壓入到棧中,以便經由過程popScene()函數出棧,持續運轉原場景。剛開端法式啟動的時刻經由過程runWithScene()運轉一個新的場景。上面經由過程代碼來講明。單擊下圖可以檢查後果。

此次代碼一共樹立了倆個場景,一個是本來的helloworld場景,一個是SecondScene場景。詳細的看代碼吧。

bool HelloWorld::init()
{
 bool bRet = false;
 do
 {
  CC_BREAK_IF(! CCLayer::init());

		CCLabelTTF * ttf = CCLabelTTF::create("next scene","Arial",32);
		//為該場景添加一個label菜單
		CCMenuItemLabel * labelMenu = CCMenuItemLabel::create(ttf,this,menu_selector(HelloWorld::menuCloseCallback));
		CCMenu * menu = CCMenu::create(labelMenu,NULL);
		this->addChild(menu);

  bRet = true;
 } while (0);

 return bRet;
}

//該函數完成場景的切換
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
	//應用以下的場景切換類可以發生特別的後果,這些類有許多,普通有倆個或許是三個參數,第一個參數是
	//時光,第二個參數是要切換到的場景,第三個參數依據類的分歧各不雷同,這個淡入淡出的後果第三個參數是色彩
	CCTransitionFade * fade = CCTransitionFade::create(2.0,SecondScene::scene(),ccc3(255,100,100));
	CCDirector::sharedDirector()->replaceScene(fade);
	//也能夠采取以下的辦法
	//CCDirector::sharedDirector()->pushScene(fade);
}

以下是SecondScene.cpp

#include "SecondScene.h"
#include "HelloWorldScene.h"

CCScene * SecondScene::scene()
{
	CCScene * scene = NULL;

	do
	{
		scene = CCScene::create();
		CC_BREAK_IF(!scene);

		SecondScene * layer = SecondScene::create();
		CC_BREAK_IF(!layer);

		scene->addChild(layer);
	}
	while(0);

	return scene;
}

bool SecondScene::init()
{
	bool bRet = false;

	do
	{
		CC_BREAK_IF(!CCLayer::init());

		CCLabelTTF * ttf = CCLabelTTF::create("first scene","Arial",32);
		CCMenuItemLabel * labelMenu = CCMenuItemLabel::create(ttf,this,menu_selector(SecondScene::changeScene));
		CCMenu * menu = CCMenu::create(labelMenu,NULL);
		this->addChild(menu);

		bRet = true;
	}
	while(0);

	return bRet;
}

void SecondScene::changeScene(CCObject * sender)
{
	//應用CCTransitionPageTurn類須要先設置攝像機
	CCDirector::sharedDirector()->setDepthTest(true);
	//第三個參數為false表現向前翻頁,為true表現向後翻頁
	CCTransitionPageTurn * pageTurn = CCTransitionPageTurn::create(2.0,HelloWorld::scene(),false);
	CCDirector::sharedDirector()->replaceScene(pageTurn);
	//采取以下的辦法就沒有殊效了
	//CCDirector::sharedDirector()->popScene();
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved