Cocos2d-x场景变化相关功能介绍

现场由导演级交换机Director实现。之间的相关的功能,如下面:

runWithScene(Scene* scene)。该函数能够执行场景。仅仅能在启动第一个场景时候调用该函数。假设已经有一个场景执行情况下则不能调用该函数。

replaceScene(Scene* scene)。

切换到下一个场景。

用一个新的场景替换当前场景。当前场景被终端释放。

pushScene(Scene* scene)。切换到下一个场景。将当前场景挂起放入到场景堆栈中,然后再切换到下一个场景中。

void popScene()。与pushScene配合使用,能够回到上一个场景。

void popToRootScene()。与pushScene配合使用,能够回到根场景。

我们须要注意replaceScene和pushScene使用的差别。

replaceScene会释放和销毁场景,假设须要保持原来场景的状态,replaceScene函数不适合。

pushScene并不会释放和销毁场景,原来场景的状态能够保持。可是场景不能放太多的场景对象。

使用replaceScene代码例如以下:

[html] view
plain
copy

  1. auto sc = Setting::createScene();
  2. Director::getInstance()->replaceScene(sc);

当中的Setting是下一个要切换的场景。使用pushScene代码例如以下:

[html] view
plain
copy

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

从Setting场景回到上一个场景使用代码例如以下:

[html] view
plain
copy

  1. Director::getInstance()->popScene();

以下我们通过一个实例场景切换相关函数,例如以下图所看到的有两个场景:HelloWorld和Setting(设置)。在HelloWorld场景点击“游戏设置”菜单能够切换到Setting场景。在Setting场景中点击“OK”菜单能够返回到HelloWorld场景。

我们首先须要在project中加入一个Setting场景(SettingScene.cpp和SettingScene.h),例如以下图所看到的,右键点击HelloWorldproject中Classes目录,在弹出菜单中选择“加入”→“新建项”:

弹出对话框例如以下图所看到的。在名称中输入“SettingScene.cpp”。并选择保存文件位置,然后点击“加入”button创建SettingScene.cpp。

使用相同的方法创建SettingScene.h。

以下我们看看代码部分。HelloWorldScene.cpp中的重要代码例如以下:

[html] view
plain
copy

  1. bool HelloWorld::init()
  2. {
  3. if ( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();
  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. Sprite *bg = Sprite::create("background.png");
  10. bg->setPosition(Point(origin.x + visibleSize.width/2,
  11. origin.y +visibleSize.height /2));
  12. this->addChild(bg);
  13. //開始精灵
  14. Sprite *startSpriteNormal = Sprite::create("start-up.png");
  15. Sprite *startSpriteSelected =Sprite::create("start-down.png");
  16. MenuItemSprite*startMenuItem = MenuItemSprite::create(startSpriteNormal,
  17. startSpriteSelected,
  18. CC_CALLBACK_1(HelloWorld::menuItemStartCallback,this));
  19. startMenuItem->setPosition(Director::getInstance()->convertToGL(Point(700,170)));
  20. //设置图片菜单
  21. MenuItemImage *settingMenuItem = MenuItemImage::create(
  22. "setting-up.png",
  23. "setting-down.png",
  24. CC_CALLBACK_1(HelloWorld::menuItemSettingCallback,this));
  25. settingMenuItem->setPosition(Director::getInstance()->convertToGL(Point(480,400)));
  26. //帮助图片菜单
  27. MenuItemImage *helpMenuItem = MenuItemImage::create(
  28. "help-up.png",
  29. "help-down.png",
  30. CC_CALLBACK_1(HelloWorld::menuItemHelpCallback,this));
  31. helpMenuItem->setPosition(Director::getInstance()->convertToGL(Point(860,480)));
  32. Menu*mu = Menu::create(startMenuItem, settingMenuItem, helpMenuItem, NULL);
  33. mu->setPosition(Point::ZERO);
  34. this->addChild(mu);
  35. return true;
  36. }
  37. voidHelloWorld::menuItemSettingCallback(Ref* pSender)                                                    ①
  38. {
  39. autosc = Setting::createScene();                                                                                                     ②
  40. //Director::getInstance()->replaceScene(sc);                                                                                 ③
  41. Director::getInstance()->pushScene(sc);                                                                              ④
  42. }
  43. void HelloWorld::menuItemHelpCallback(Ref*pSender)
  44. {
  45. MenuItem* item = (MenuItem*)pSender;
  46. log("TouchHelp %p", item);
  47. }
  48. void HelloWorld::menuItemStartCallback(Ref*pSender)
  49. {
  50. MenuItem* item = (MenuItem*)pSender;
  51. log("TouchStart %p", item);
  52. }

上述代码中的第①行定义的函数menuItemSettingCallback,是在用户点击“游戏设置”菜单时候回调。

第②行代码是创建设置创建对象。第③行是使用replaceScene函数进行场景切换。第④行代码是pushScene函数进行场景切换。

HelloWorldScene.cpp中的重要代码例如以下:

[html] view
plain
copy

  1. bool Setting::init()
  2. {
  3. if ( !Layer::init() )
  4. {
  5. return false;
  6. }
  7. Size visibleSize = Director::getInstance()->getVisibleSize();
  8. Point origin = Director::getInstance()->getVisibleOrigin();
  9. Sprite *bg = Sprite::create("setting-back.png");
  10. bg->setPosition(Point(origin.x + visibleSize.width/2,
  11. origin.y +visibleSize.height /2));
  12. this->addChild(bg);
  13. //音效
  14. auto soundOnMenuItem = MenuItemImage::create(
  15. "on.png",
  16. "on.png");
  17. auto soundOffMenuItem = MenuItemImage::create(
  18. "off.png",
  19. "off.png");
  20. auto soundToggleMenuItem = MenuItemToggle::createWithCallback(
  21. CC_CALLBACK_1(Setting::menuSoundToggleCallback,this),
  22. soundOnMenuItem,
  23. soundOffMenuItem,
  24. NULL);
  25. soundToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(818,220)));
  26. //音乐
  27. auto musicOnMenuItem  =MenuItemImage::create(
  28. "on.png",
  29. "on.png");
  30. automusicOffMenuItem  =MenuItemImage::create(
  31. "off.png",
  32. "off.png");
  33. auto musicToggleMenuItem = MenuItemToggle::createWithCallback(
  34. CC_CALLBACK_1(Setting::menuMusicToggleCallback,this),
  35. musicOnMenuItem,
  36. musicOffMenuItem,
  37. NULL);
  38. musicToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(818,362)));
  39. //Okbutton
  40. autookMenuItem  = MenuItemImage::create(
  41. "ok-down.png",
  42. "ok-up.png",
  43. CC_CALLBACK_1(Setting::menuOkCallback, this));
  44. okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600,510)));
  45. Menu* mn = Menu::create(soundToggleMenuItem,
  46. musicToggleMenuItem,okMenuItem,NULL);
  47. mn->setPosition(Point::ZERO);
  48. this->addChild(mn);
  49. return true;
  50. }
  51. void Setting::menuOkCallback(Ref*pSender)                                                                                   ①
  52. {
  53. Director::getInstance()->popScene();                                                                                             ②
  54. }
  55. void Setting::menuSoundToggleCallback(Ref*pSender)
  56. {}
  57. void Setting::menuMusicToggleCallback(Ref*pSender)
  58. {}

在第一代码①行-defined功能menuOkCallback。用户设置场景中点击“OK”当菜单回调。文章②的代码行popScene该函数返回HelloWorld幕后。

时间: 2024-11-06 21:46:17

Cocos2d-x场景变化相关功能介绍的相关文章

数据库相关中间件介绍

数据库相关中间件介绍 详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt412 这里主要介绍互联网行业内有关数据库的相关中间件.数据库相关平台主要解决以下三个方面的问题: 为海量前台数据提供高性能.大容量.高可用性的访问 为数据变更的消费提供准实时的保障 高效的异地数据同步 应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL).写操作会在数据

Exchange2016正式版功能介绍及全新安装配置

Exchange2016功能介绍及全新安装配置 说到Exchange服务相信很多人都在关注,微软在2015年更新了很多服务,从功能上来说确实做了很多优化及提升,具体就不多说了,微软在2015年10月1日发布了Exchange2016正式版,版本还是分为标准版和企业版,此次发布为多语言版本 同样微软在2015年发布了那些新产品呢 : 我们还是说说Exchange2016,从安装及官网文档上看微软从Exchange2010到Exchange2016角色上缩减了很多,从Exchange2010的Mai

MyEclipse相关用法介绍

MyEclipse相关用法介绍 ================================================================================ 编辑: Ctrl+Shift+L      显示所有快捷键 Ctrl+K        参照选中的词(Word)快速定位到下一个 Ctrl+Shift+K      参照选中的词(Word)快速定位到上一个 Ctrl+O         快速显示OutLine Ctrl+T        快速显示当前类的

网络视频相关技术介绍

AnyChat音视频互动开发平台(SDK)是一套跨平台的即时通讯解决方案,基于先进的H.264视频编码标准.AAC音频编码标准与P2P技术,支持高清视频,整合了佰锐科技在音视频编码.多媒体通讯领域领先的开发技术和丰富的产品经验而设计的高质量.宽适应性.分布式.模块化的网络音视频互动平台.        AnyChat音视频互动开发平台(SDK)包含了音视频处理模块(采集.编解码).流媒体管理模块(丢包重传.抖动平滑.动态缓冲).流媒体播放模块(多路混音.音视频同步)以及P2P网络模块(NAT穿透

Dreamweaver简明手册——常用功能介绍

1.概述 Dreamweaver 是一款集网页制作和管理网站于一身的所见即所得网页编辑器,在开发前端视图页面的时候,用这个工具,能让代码更清晰化,界面更整洁,可以大大的提升Web前端开发效率.基于数通畅联的AEAI DP开发平台可以直接生成JSP前端页面,通常在AEAI DP中使用JSP编辑器编辑JSP页面,但是JSP编辑器强于在JSP页面上写JAVA代码片段,但调整页面里的表单元素以及CSS样式等不方便,因此,一般采用AEAI D跟Dreamweaver配合进行前端JSP页面扩展开发.本文对D

CYQ.Data V5 数据库读写分离功能介绍

前言 好多年没写关于此框架的新功能的介绍了,这些年一直在默默地更新,从Nuget上的记录就可以看出来: 这几天在看Java的一些东西,除了觉的Java和.NET的相似度实在太高之外,就是Java太原始,急需被拯救. 之后又回到.NET的思维来,想着怎么在框架里实现读写分离控制请求切换. 之前几个月一直都有在思考,想及对框架现有的代码改动可能较大,所以迟迟没怎么下手. 最近终于在厕所蹲下的一瞬间,灵光一闪,感觉思绪来了,然后一鼓作气,就把它给作了. 数据库读写分离的三步曲 1:实现主(读)从(写)

大数据的一些相关知识介绍

什么是大数据 大数据(big data),指无法在一定时间范围内用常规软件工具进行捕捉.管理和处理的数据集合,是需要新处理模式才能具有更强的决策力.洞察发现力和流程优化能力的海量.高增长率和多样化的信息资产. 大数据的定义是4Vs:Volume.Velocity.Variety.Veracity.用中文简单描述就是大.快.多.真. Volume -- 数据量大 随着技术的发展,人们收集信息的能力越来越强,随之获取的数据量也呈爆炸式增长.例如百度每日处理的数据量达上百PB,总的数据量规模已经到达E

微服务之API网关 kong 使用场景之路由功能

API网关,在介绍spring cloud的时候我们也曾提到过zuul,并使用zuul做了一个简单的实验证明zuul是可以实现网关的路由功能的,在这篇文章中,我们会同样使用类似简单的例子来验证kong在此种场景下的使用. spring cloud之zuul的类似实现 spring cloud的zuul的类似功能和实现,可参看下文: spring cloud之api网关 https://blog.csdn.net/liumiaocn/article/details/53941354 场景说明 项目

SQL数据同步到ELK(四)- 利用SQL SERVER Track Data相关功能同步数据(上)

一.相关文档 老规矩,为了避免我的解释误导大家,请大家务必通过官网了解一波SQL SERVER的相关功能. 文档地址: 整体介绍文档:https://docs.microsoft.com/en-us/sql/relational-databases/track-changes/about-change-tracking-sql-server?view=sql-server-2017 Change Data Capture:https://docs.microsoft.com/en-us/sql/