今天學習了cocosd-x中場景和層的使用。
本次例項有兩個場景helloword , setting,在helloword的遊戲設定中可以切換到setting場景
首先我們新建乙個setting類,繼承自cocos2d::layer類
具體**如下:
#ifndef __helloworld_scene_h__
#define __helloworld_scene_h__
#include "cocos2d.h"
class helloworld : public cocos2d::layer
;#endif // __helloworld_scene_h__
#include"settingscene.h"
using_ns_cc;
scene *setting::createscene()
bool setting::init()
size visiblesize = director::getinstance()->getvisiblesize();
vec2 origin = director::getinstance()->getvisibleorigin();
//背景建立
sprite *bg = sprite::create("setting-back.png");
bg->setposition(origin.x + visiblesize.width / 2,
origin.y + visiblesize.height / 2);
this->addchild(bg);
auto soundonmenuitem = menuitemimage::create("on.png",
"on.png");
auto soundoffmenuitem = menuitemimage::create("off.png",
"off.png");
auto soundtogglemenuitem = menuitemtoggle::createwithcallback(cc_callback_1(setting::menusoundtogglecallback, this),
soundonmenuitem,
soundoffmenuitem,
null);
soundtogglemenuitem->setposition(director::getinstance()->converttogl(vec2(818, 220)));
//**設定
auto musiconmenuitem = menuitemimage::create("on.png",
"on.png");
auto musicoffmenuitem = menuitemimage::create("off.png",
"off.png");
auto musictogglemenuitem = menuitemtoggle::createwithcallback(cc_callback_1(setting::menumusictogglecallback, this),
musiconmenuitem,
musicoffmenuitem,
null);
musictogglemenuitem->setposition(director::getinstance()->converttogl(vec2(818, 362)));
//ok按鈕
auto okmenuitem = menuitemimage::create("ok-down.png",
"ok-up.png", cc_callback_1(setting::menuokcallback , this));
okmenuitem->setposition(director::getinstance()->converttogl(vec2(600, 510)));
menu* mn = menu::create(soundtogglemenuitem, musictogglemenuitem, okmenuitem, null);
mn->setposition(vec2::zero);
this->addchild(mn);
return true;
}void setting::menusoundtogglecallback(cocos2d::ref* psender)
void setting::menumusictogglecallback(cocos2d::ref* psender)
void setting::menuokcallback(cocos2d::ref* psender)
以上就完成了對setting類的封裝,下面我們只要在helloworld場景中進行場景的切換就可以了
具體**如下:
// on "init" you need to initialize your instance
bool helloworld::init()
size visiblesize = director::getinstance()->getvisiblesize();
vec2 origin = director::getinstance()->getvisibleorigin();
//新增背景
sprite *bg = sprite::create("background.png");
bg->setposition(vec2(origin.x + visiblesize.width / 2,
origin.y + visiblesize.height / 2));
this -> addchild(bg);
//開始精靈
sprite *startspritenormal = sprite::create("start-up.png");
sprite *startspriteselected = sprite::create("start-down.png");
menuitemsprite *startmenuitem = menuitemsprite::create(startspritenormal,
startspriteselected,
cc_callback_1(helloworld::menuitemstartcallback, this));
startmenuitem->setposition(director::getinstance()->converttogl(vec2(700, 170)));
//設定選單
menuitemimage *settingmenuitem = menuitemimage::create(
"setting-up.png",
"setting-down.png",
cc_callback_1(helloworld::menuitemsettingcallback, this));
settingmenuitem->setposition(director::getinstance()->converttogl(vec2(480, 400)));
//設定幫助選單
menuitemimage *helpmenuitem = menuitemimage::create(
"help-up.png",
"help-down.png",
cc_callback_1(helloworld::menuitemhelpcallback, this));
helpmenuitem->setposition(director::getinstance()->converttogl(vec2(860, 480)));
menu *mn = menu::create(startmenuitem, settingmenuitem, helpmenuitem, null);
mn->setposition(vec2::zero);
this->addchild(mn);
return true;
}void helloworld::menuitemstartcallback(cocos2d::ref *psender)
void helloworld::menuitemsettingcallback(cocos2d::ref *psender)
void helloworld::menuitemhelpcallback(cocos2d::ref *psender)
具體使用到的場景切換函式:
void pushscene(); //切換到下乙個場景,將當前場景掛起到場景堆疊中,然後切換到下乙個場景
void popscene(); //回到上乙個場景
以及場景過度動畫:
auto sc = setting::createscene();
auto rescene = transitionjumpzoom::create(2.0f, sc);
director::getinstance()->pushscene(rescene);
關鍵**就是第二句動畫的設定。具體動畫型別去檢視過渡動畫類transitionscene類和它的自雷
COCOS2DX 場景與層
runscene scene 啟動第乙個場景時使用 popscene 與pushscene配合使用,可以回到上乙個場景 poptorootscene 與pushscene配合使用,可以回到根場景 2.場景過渡動畫 由transitionsecene和它的子類展示 3.場景的生命週期函式 ctor建構...
Cocos2d x 下的場景,層,精靈
cocos2d的場景是用來裝載層,精靈的容器。可以向場景中新增層和精靈。層和精靈之間可以互相新增。層,精靈,以及場景都是繼承自節點cnode的類,因此在以遊戲為根節點的樹上他們都是子節點。如果乙個精靈新增到了乙個層,而該層新增進入了場景,那麼移動這個層的時候就會使得層中的場景一起運動。但是如果層中的...
Cocos2d x之場景切換
在很多rpg遊戲中大部分存在多個場景,如開始的歡迎介面 選單介面 戰鬥介面 場景切換只需要呼叫ccdirector shareddirector replacescene s s為新的場景,這句 的是含意,是用新的場景s去替換掉舊的場景,但是這樣的場景替換,來得太突然,給使用者的感覺不太好,我們需要...