cocos 中熟练运用场景的切换

在实际游戏运用中,一个场景是远远不够的,我们必须要掌握多个场景之间的切换。

场景切换时通过Director导演类来实现的,在cocos中定义了如下几种场景切换函数:

1,void runWithScene(Scene *scene)。这是一个运行场景的函数,该函数的使用情况是当前没有场景正在运行,因为一次只能运行一个场景。

2,void replaceScene(Scene *scene)。   这是第一种用来切换到另一个场景的函数,用一个新的场景来代替当前场景,当前场景则会被终端释放。

3,void pushScene(Scene *scene)。      这是第二种用来切换到下一个场景的函数,用一个新的场景来代替当前场景,当前场景挂起压入场景堆栈中。

void  popScene(Scene* scene)。       该函数配合pushScene使用,用来返回上一个场景。

void  popToRootScene(Scene*scene)。配合pushScene使用,返回根场景。

实例展示:

1,首先在我们默认生成的HelloWorld 场景之外建立我们的新场景Setting

SettingScene.h:

#ifndef __Setting_SCENE_H__
#define __Setting_SCENE_H__

#include "cocos2d.h"

class Setting : public cocos2d::Layer
{
public:

static cocos2d::Scene* createScene();

virtual bool init();

void menuSoundToggleCallback(cocos2d::Ref* pSender);
 void menuMusicToggleCallback(cocos2d::Ref* pSender);
 void menuOkCallback(cocos2d::Ref* pSender);

// implement the "static create()" method manually
 CREATE_FUNC(Setting);
};

#endif

SettingScene.cpp:

#include "SettingScene.h"

USING_NS_CC;

Scene *Setting::createScene()
{
 auto scene = Scene::create();

auto layer = Setting::create();

scene->addChild(layer);

return scene;
}

bool Setting::init()
{
 if (!Layer::init())
 {
  return false;
 }

Size visibleSize = Director::getInstance()->getVisibleSize();
 Vec2 origin = Director::getInstance()->getVisibleOrigin();

Sprite *bg = Sprite::create("menu/setting-back.png");

// position the label on the center of the screen
 bg->setPosition(Vec2(origin.x + visibleSize.width / 2,
  origin.y + visibleSize.height / 2));
 this->addChild(bg);

//音效
 auto soundOnMenuItem = MenuItemImage::create(
  "menu/on.png",
  "menu/on.png");
 auto soundOffMenuItem = MenuItemImage::create(
  "menu/off.png",
  "menu/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(
  "menu/on.png",
  "menu/on.png");
 auto musicOffMenuItem = MenuItemImage::create(
  "menu/off.png",
  "menu/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(
  "menu/ok-down.png",
  "menu/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::menuOkCallback(Ref* pSender)
{
 Director::getInstance()->popScene();
}

void Setting::menuSoundToggleCallback(Ref* pSender)
{

}

void Setting::menuMusicToggleCallback(Ref* pSender)
{

}

在根场景下的切换函数使用于你相应的切换按钮的回调函数中:

void HelloWorld::menuItemSettingCallback(Ref* pSender)
{
 MenuItem* item = (MenuItem*)pSender;
 log("Touch Setting %p", item);

auto sc = Setting::createScene();
 
 Director::getInstance()->pushScene(sc);

}

运行效果:  点击游戏设置,切换到下一个场景,,,点击ok,返回上一个场景。

时间: 2024-11-07 20:19:05

cocos 中熟练运用场景的切换的相关文章

3.cocos2dx之Menu,通过menu来实现场景的切换

 1 头文件 TMenu.h #ifndef __TMENU_H__ #define __TMENU_H__ #include "cocos2d.h" USING_NS_CC; class TMenu :public CCLayer { public: static CCScene * scene(); CREATE_FUNC(TMenu); bool init(); CCMenu * menu; void menuCallback(CCObject * sender); void

cocos2d-x场景效果切换

Cocos2d-x提供了很多场景间切换的效果 1.使用方法: ccTime t = 1.2;    CCScene * pScene = CCScene::node();    CCLayer *pLayer = new book_page1();    pLayer->autorelease();    pScene->addChild(pLayer);    CCTransitionFade* transitionScene = CCTransitionFade::transitionWi

【cocos2d-x游戏开发】cocos中的三种缓存类

Cocos中有三种缓存类: (1):纹理缓存:TextureCache (2):精灵帧缓存:SpriteFrameCache (3):动画缓存:AnimationCache 游戏最要重要的就是流畅度,如果我们的游戏经常因为加载资源出现卡顿的情况,那么这个游戏就没有很好地游戏体验.所以,为了解决这个问题,缓存就应运而生了. 缓存的目的就是:现将所需资源加载到内存中,之后再次使用该资源的时候,就可以直接从内存中读出,而不需要重新加载,从而减少了CPU和GPU的内存占用. TextureCache 在

cocos2dx 场景的切换

我们知道cocos2dx中可以由多个场景组成,那么我是如何来切换场景的呢 首先我们先新建一个新的场景类,我推荐的方式是,在你工程的目录中找到一个classes的文件夹,里面有AppDelegate.cpp和AppDelegate.h还有HelloWorldScene.cpp和HelloWorldScene.h,我们需要做的就是把HelloWorldScene.cpp和HelloWorldScene.h复制在当前文件夹下,然后把HelloWorldScene中一些东西修改 例如我要新建一个Game

场景的切换

/** * 以下代码实现的是切换场景的目的, * 点击文本框中的字体时,切换场景,有图片 */ //1.修改bool HelloWorld::init()方法 //2.创建ImageScene方法,c++ //3.将创建的场景添加到bool HelloWorld::init()中, //4.在最开始的位置上添加#include "ImageScene.h" //5.别忘了将自己创建的方法添加到xcode的编译环境中,不然运行时异常 //6.点击项目,点击Build Phases,找到C

09.spritekit征程——场景的切换

09.spritekit征程--场景的切换 上文讲到咱们的小精灵(sprite)在场景中"舞动",枯燥的学习似乎有了那么点意思.我相信各位看官都是想自己开发一款独有的游戏,自然就少不了绚丽的效果以及开场.因此今天咱们来对场景之间的切换进行入门. Sprite Kit对场景之间的切换简单到爆.在下面的例子当中,我们将创建第二个场景来学习其他游戏特性.前面的动画效果最终会导致"Hello World"文本从屏幕淡出,但这仅仅只发生在当然场景中.今天我们的任务是当文本消失

iOS Sprite Kit教程之场景的切换

iOS Sprite Kit教程之场景的切换 Sprite Kit中切换场景 每一个场景都不是单独存在的.玩家可以从一个场景中切换到另外一个场景中.本小节,我们来讲解场景切换.在每一个游戏中都会使用到场景与场景的切换功能,例如,在街机原始人游戏中,选择关卡这一场景中,可以看到有4关,这四关分别代表了4个场景,如图2.20所示. 图2.20  街机原始的关卡选择 当玩家选择第一关时,就会由选择关卡的场景跳转到第一关的场景中,如图2.21所示. 图2.21  第一关的场景 当玩家选择第二关时,就会由

【Cocos2dx】新建场景、场景的切换、设置启动场景与菜单的新建

这是Cocos2dx最简单的部分.主要是体现对场景的操作,其实这东西就是Flash的舞台,安卓的Activity,WIN32窗体程序的Framework窗体,网页的body,反正就是对那个容纳各种东西的大容器进行操作,爱怎么叫就怎么叫. 用一个例子说明这个问题,将会做出如下的效果,在官方提供的Helloworld加一个场景Scene1,Scene1里面就摆一个可以切回Helloworld的按钮,同时设置这个Scene1为启动程序(游戏)的初始场景.同时对原本Helloworld场景的关闭按钮进行

MyEclipse中SVN用户名密码的切换

WindowsXP: 将C:\Documents and Settings\Administrator\Application Data\Subversion\auth\svn.simple文件夹下的所有文件删除就行了 Application Data是隐藏文件 要先显示隐藏文件 Windows7: 将C:\Users\admin\AppData\Roaming\Subversion\auth\svn.simple文件夹下的所有文件删除就行了 其中AppData是隐藏的文件夹,也是要先显示出来才