HelloWorld场景就是游戏中的主菜单场景。HelloWorld.h文件代码如下:

  1. #define __HELLOWORLD_SCENE_H__
  2. #include "cocos2d.h"
  3. #include "SimpleAudioEngine.h"                                          ①
  4. #include "SettingScene.h"
  5. class HelloWorld : public cocos2d::Layer
  6. {
  7. public:
  8. static cocos2d::Scene* createScene();
  9. virtual bool init();                                                    ②
  10. virtual void onEnter();
  11. virtual void onEnterTransitionDidFinish();
  12. virtual void onExit();
  13. virtual void onExitTransitionDidStart();
  14. virtual void cleanup();                                                 ③
  15. void menuItemHelpCallback(cocos2d::Ref* pSender);
  16. void menuItemStartCallback(cocos2d::Ref* pSender);
  17. void menuItemSettingCallback(cocos2d::Ref* pSender);
  18. CREATE_FUNC(HelloWorld);
  19. };
  20. bool HelloWorld::init()
  21. {
  22. if ( !Layer::init() )
  23. {
  24. return false;
  25. }
  26. log("HelloWorld init");
  27. Size visibleSize = Director::getInstance()->getVisibleSize();
  28. Point origin = Director::getInstance()->getVisibleOrigin();
  29. Sprite *bg = Sprite::create("background.png");
  30. bg->setPosition(Point(origin.x + visibleSize.width/2,
  31. origin.y + visibleSize.height /2));
  32. this->addChild(bg);
  33. //开始精灵
  34. Sprite *startSpriteNormal = Sprite::create("start-up.png");
  35. Sprite *startSpriteSelected = Sprite::create("start-down.png");
  36. MenuItemSprite *startMenuItem = MenuItemSprite::create(startSpriteNormal,
  37. startSpriteSelected,
  38. CC_CALLBACK_1(HelloWorld::menuItemStartCallback, this));
  39. startMenuItem->setPosition(Director::getInstance()->convertToGL(Point(700, 170)));
  40. // 设置图片菜单
  41. MenuItemImage *settingMenuItem = MenuItemImage::create(
  42. "setting-up.png",
  43. "setting-down.png",
  44. CC_CALLBACK_1(HelloWorld::menuItemSettingCallback, this));
  45. settingMenuItem->setPosition(Director::getInstance()->convertToGL(Point(480, 400)));
  46. // 帮助图片菜单
  47. MenuItemImage *helpMenuItem = MenuItemImage::create(
  48. "help-up.png",
  49. "help-down.png",
  50. CC_CALLBACK_1(HelloWorld::menuItemHelpCallback, this));
  51. helpMenuItem->setPosition(Director::getInstance()->convertToGL(Point(860, 480)));
  52. Menu* mu = Menu::create(startMenuItem, settingMenuItem, helpMenuItem, NULL);
  53. mu->setPosition(Point::ZERO);
  54. this->addChild(mu);
  55. return true;
  56. }
  57. void HelloWorld::menuItemSettingCallback(Ref* pSender)
  58. {
  59. auto sc = Setting::createScene();
  60. auto reScene = TransitionJumpZoom::create(1.0f, sc);
  61. Director::getInstance()->pushScene(reScene);
  62. SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ②
  63. }
  64. void HelloWorld::menuItemHelpCallback(Ref* pSender)
  65. {
  66. MenuItem* item = (MenuItem*)pSender;
  67. log("Touch Help %p", item);
  68. SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ③
  69. }
  70. void HelloWorld::menuItemStartCallback(Ref* pSender)
  71. {
  72. MenuItem* item = (MenuItem*)pSender;
  73. log("Touch Start %p", item);
  74. SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav");                  ④
  75. }
  76. void HelloWorld::onEnter()
  77. {
  78. Layer::onEnter();
  79. log("HelloWorld onEnter");
  80. }
  81. void HelloWorld::onEnterTransitionDidFinish()
  82. {
  83. Layer::onEnterTransitionDidFinish();
  84. log("HelloWorld onEnterTransitionDidFinish");
  85. //播放
  86. SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Jazz.mp3", true);       ⑤
  87. }
  88. void HelloWorld::onExit()
  89. {
  90. Layer::onExit();
  91. log("HelloWorld onExit");
  92. }
  93. void HelloWorld::onExitTransitionDidStart()
  94. {
  95. Layer::onExitTransitionDidStart();
  96. log("HelloWorld onExitTransitionDidStart");
  97. }
  98. void HelloWorld::cleanup()
  99. {
  100. Layer::cleanup();
  101. log("HelloWorld cleanup");
  102. //停止
  103. SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Jazz.mp3");         ⑥
  104. }

上述代码第①行using namespace CocosDenshion是使用命名空间CocosDenshion,它是CocosDenshion引擎所需要的。代码②、③、④行SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav")是在点击菜单时候播放音效。第⑤行代码是onEnterTransitionDidFinish()函数中播放背景音乐。第⑥行代码是cleanup()函数中停止播放背景音乐。

更多内容请关注Cocos2d-x系列图书《Cocos2d-x实战(卷Ⅰ):C++开发》
本书交流讨论网站:http://www.cocoagame.net
欢迎加入cocos2d-x技术讨论群:257760386、327403678

Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现的更多相关文章

  1. Cocos2d-x实例:设置背景音乐与音效- AppDelegate实现

    为了进一步了解背景音乐和音效播放的,我们通过一个实例给大家介绍一下.如下图所示有两个场景:HelloWorld和Setting.在HelloWorld场景点击“游戏设置”菜单可以切换到Setting场 ...

  2. Cocos2d-x实例:设置背景音乐与音效-设置场景实现

    设置场景(Setting),Setting.h文件代码如下: #ifndef __Setting_SCENE_H__ #define __Setting_SCENE_H__ #include &quo ...

  3. Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置

    UserDefault可以实现数据的存储,但是它的使用不能泛滥,具体讲一般情况下不会使用它保存大量的数据,它没有SQL语句那样的灵活.UserDefault除了保存游戏设置外,还有可以长期保持游戏精灵 ...

  4. Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)

    游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...

  5. android开发之背景音乐与音效

    android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) MediaPlayer class can be used to control playback of audio/v ...

  6. 将 SQL Server 实例设置为自动启动(SQL Server 配置管理器)

    本主题说明如何使用 SQL Server 配置管理器在 SQL Server 2012 中将 SQL Server 实例设置为自动启动. 在安装过程中,SQL Server 通常配置为自动启动. 如果 ...

  7. ORACLE默认实例设置--linux

    数据库实例多了之后,每次export的时候,显示的ORACLE_SID总不是自己经常用的那个,要是能让默认的自定义就好了. 现在就解释一下在linux环境中如何定义: 1.su - oracle 2. ...

  8. 关于Cocos2d-x中背景音乐和音效的添加

    1.首先引入头文件和命名空间 #include "SimpleAudioEngine.h" using namespace CocosDenshion; 2.在GameScene. ...

  9. 一个filebeat实例 设置多topic设置

    方法1:一实例多topic: https://discuss.elastic.co/t/filebeat-5-0-output-to-kafka-multiple-topics/67934 The d ...

随机推荐

  1. Hadoop平台配置总结

    hadoop的配置,个人感觉是非常容易出问题.一个原因是要配置的地方多,还有个原因就是集群配置要在几台机器上都配置正确,才能保证配置好hadoop,跑起任务. 经过昨晚加今天上午的折腾,总算成功配好了 ...

  2. cocos2d-x 缓动曲线

    转自:http://blog.csdn.net/cocos2der/article/details/7261808 在实现运动中,我们常常需要实现一些加速度或者减速度的效果,cocos2d-x引擎为我 ...

  3. oracle连接数据的oci和thin的区别

    1)从使用上来说,oci必须在客户机上安装oracle客户端或才能连接,而thin就不需要,因此从使用上来讲thin还是更加方便,这也是thin比较常见的原因.2)原理上来看,thin是纯java实现 ...

  4. Swift学习笔记六

    集合类型(Collection Type) Swift提供三种主要的集合类型:数组(array).集合(set).字典(dictionary).数组是有序的值序列,集合是无序的值序列,字典是无序的键值 ...

  5. Codeforces Round #326 (Div. 2) A. Duff and Meat 水题

    A. Duff and Meat Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/588/probl ...

  6. C# 强制关闭当前程序进程(完全Kill掉不留痕迹)

    C# 强制关闭当前程序进程(完全Kill掉不留痕迹) /// <summary> /// 运行DOS命令 /// DOS关闭进程命令(ntsd -c q -p PID )PID为进程的ID ...

  7. 根据字符串创建FTP本地目录 并按照日期建立子目录返回路径

    /** * 根据字符串创建FTP本地目录 并按照日期建立子目录返回 * @param path * @return */ private String getFolder(String path) { ...

  8. iOS 2D绘图详解(Quartz 2D)之概述

    前言:最近在研究自定义控件,由于想要彻底的定制控件的视图还是要继承UIView,虽然对CALayer及其子类很熟练,但是对Quartz 2D这个强大的框架仍然概念模棱两可.于是,决定学习下,暂定7篇文 ...

  9. MySQL 5.7: Enhanced Multi-threaded slaves

    http://geek.rohitkalhans.com/2013/09/enhancedMTS-deepdive.html   科学上网 Introduction Re-applying binar ...

  10. 【ZZ】Java : 一个帝国的诞生 & 假如时光能够倒流, 我会这么学习Java

    Java : 一个帝国的诞生 http://dy.qq.com/article.htm?id=20160523A06XFS00 写的很有意思,一下子了解了JAVA的历史. 假如时光能够倒流, 我会这么 ...