cocos2d-x学习之场景切换

游戏中经常会发现场景之间的切换,今天就来谈谈cocos2d-x是怎样实现场景中的切换的。

好吧,还是用一个例子来说明一下;我们先来创建两个不同场景

(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继续来运行从而实现场景切换;

这样关于场景切换的小小实现就完成,希望对大家有帮助


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