Cocos2d-x实例:设置背景音乐与音效-设置场景实现
设置场景(Setting),Setting.h文件代码如下:
- #ifndef __Setting_SCENE_H__
- #define __Setting_SCENE_H__
- #include "cocos2d.h"
- #include "SimpleAudioEngine.h"
- class Setting : public cocos2d::Layer
- {
- bool isEffect; ①
- public:
- static cocos2d::Scene* createScene();
- virtual bool init();
- virtual void onEnter();
- virtual void onEnterTransitionDidFinish();
- virtual void onExit();
- virtual void onExitTransitionDidStart();
- virtual void cleanup();
- void menuSoundToggleCallback(cocos2d::Ref* pSender);
- void menuMusicToggleCallback(cocos2d::Ref* pSender);
- void menuOkCallback(cocos2d::Ref* pSender);
- CREATE_FUNC(Setting);
- };
- #endif // __Setting_SCENE_H__
- #define __HELLOWORLD_SCENE_H__
上述代码第①是定义布尔类型成员变量isEffect,它用来保存现在是否允许音效,事实上是否允许音效和背景音乐播放状态应该持久化到文件中,由于我们还没有介绍数据持久化,所以我们采用isEffect变量记录状态,当我们在后面的章节学习完成数据持久化后,再保存它们状态。其它的代码与HelloWorld场景代码非常相似,这里不再赘述。Setting.cpp文件代码如下:
- #include "SettingScene.h"
- USING_NS_CC;
- using namespace CocosDenshion;
- … …
- bool Setting::init()
- {
- if ( !Layer::init() )
- {
- return false;
- }
- log("Setting init");
- Size visibleSize = Director::getInstance()->getVisibleSize();
- Point origin = Director::getInstance()->getVisibleOrigin();
- Sprite *bg = Sprite::create("setting-back.png");
- bg->setPosition(Point(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),
- soundOffMenuItem,
- soundOnMenuItem,
- NULL);
- soundToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(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),
- musicOffMenuItem,
- musicOnMenuItem,
- NULL );
- musicToggleMenuItem->setPosition(Director::getInstance()->convertToGL(Point(818, 362)));
- //Ok按钮
- auto okMenuItem = MenuItemImage::create(
- "ok-down.png",
- "ok-up.png",
- CC_CALLBACK_1(Setting::menuOkCallback, this));
- okMenuItem->setPosition(Director::getInstance()->convertToGL(Point(600, 510)));
- Menu* mn = Menu::create(soundToggleMenuItem, musicToggleMenuItem,okMenuItem, NULL);
- mn->setPosition(Point::ZERO);
- this->addChild(mn);
- return true;
- }
- void Setting::menuOkCallback(Ref* pSender)
- {
- Director::getInstance()->popScene();
- if (isEffect) {
- SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav"); ①
- }
- }
- void Setting::menuSoundToggleCallback(Ref* pSender) ②
- {
- auto soundToggleMenuItem = (MenuItemToggle*)pSender;
- log("soundToggleMenuItem %d", soundToggleMenuItem->getSelectedIndex());
- if (isEffect) {
- SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav"); ③
- }
- if (soundToggleMenuItem->getSelectedIndex() == 1) {//选中状态Off -> On ④
- isEffect = false;
- } else {
- isEffect = true;
- SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav"); ⑤
- }
- }
- void Setting::menuMusicToggleCallback(Ref* pSender) ⑥
- {
- auto musicToggleMenuItem = (MenuItemToggle*)pSender;
- log("musicToggleMenuItem %d", musicToggleMenuItem->getSelectedIndex());
- if (musicToggleMenuItem->getSelectedIndex() == 1) {//选中状态Off -> On ⑦
- SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Synth.mp3");
- } else {
- SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Synth.mp3");
- }
- if (isEffect) {
- SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav"); ⑧
- }
- }
- void Setting::onEnter()
- {
- Layer::onEnter();
- log("Setting onEnter");
- }
- void Setting::onEnterTransitionDidFinish()
- {
- Layer::onEnterTransitionDidFinish();
- log("Setting onEnterTransitionDidFinish");
- isEffect = true;
- //播放
- SimpleAudioEngine::getInstance()->playBackgroundMusic("sound/Synth.mp3", true); ⑨
- }
- void Setting::onExit()
- {
- Layer::onExit();
- log("Setting onExit");
- }
- void Setting::onExitTransitionDidStart()
- {
- Layer::onExitTransitionDidStart();
- log("Setting onExitTransitionDidStart");
- }
- void Setting::cleanup()
- {
- Layer::cleanup();
- log("Setting cleanup");
- //停止
- SimpleAudioEngine::getInstance()->stopBackgroundMusic("sound/Synth.mp3"); ⑩
- }
上述代码第①、③、⑧行是在判断isEffect为true(音效播放开关打开)情况下播放音效。
代码第②行menuSoundToggleCallback是用户点击音效开发按钮时候回调函数,其中第④行代码是判断是否按钮状态从Off -> On,如果是则将开关变量isEffect 设置为false,否则为true,而且通过第⑤行代码SimpleAudioEngine::getInstance()->playEffect("sound/Blip.wav")播放一次音效。
代码第⑥行menuMusicToggleCallback是用户点击背景音乐按钮时候回调函数,其中第⑦行代码是判断是否按钮状态从Off -> On,如果是则停止播放背景音乐,否则为开始播放。
第⑧行代码是onEnterTransitionDidFinish()函数中播放背景音乐。第⑨行代码是cleanup()函数中停止播放背景音乐。
Cocos2d-x实例:设置背景音乐与音效-设置场景实现的更多相关文章
- Cocos2d-x实例:设置背景音乐与音效-HelloWorld场景实现
HelloWorld场景就是游戏中的主菜单场景.HelloWorld.h文件代码如下: #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h& ...
- Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置
UserDefault可以实现数据的存储,但是它的使用不能泛滥,具体讲一般情况下不会使用它保存大量的数据,它没有SQL语句那样的灵活.UserDefault除了保存游戏设置外,还有可以长期保持游戏精灵 ...
- Cocos2d-x实例:设置背景音乐与音效- AppDelegate实现
为了进一步了解背景音乐和音效播放的,我们通过一个实例给大家介绍一下.如下图所示有两个场景:HelloWorld和Setting.在HelloWorld场景点击“游戏设置”菜单可以切换到Setting场 ...
- 创建 PDO 实例并在构造函数中设置错误模式
PDO 将只简单地设置错误码,可使用 PDO::errorCode() 和 PDO::errorInfo() 方法来检查语句和数据库对象.如果错误是由于对语句对象的调用而产生的,那么可以调用那个对象的 ...
- jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法)
jquery简单使用(看教程:快全有实例)(固定样式:$().val()设置属性,$().click()设置方法) 一.总结 1.jquery不懂之处直接看教程,案例都有,有简单又快 2.jquery ...
- Swift - 给游戏添加背景音乐和音效(SpriteKit游戏开发)
游戏少不了背景音乐和音效.下面我们通过创建一个管理音效的类,来实现背景音乐的播放,同时点击屏幕可以播放相应的音效. 声音管理类 SoundManager.swift 1 2 3 4 5 6 7 8 9 ...
- android开发之背景音乐与音效
android开发之背景音乐与音效 一:添加背景音乐(MediaPlayer) MediaPlayer class can be used to control playback of audio/v ...
- iOS开发--应用设置及用户默认设置【1、bundle的运用】
在iphone里面,应用都会在“设置”里面有个专属的应用设置,选择该菜单界面,用户便可以在其中输入和更改各种选项,协助用户更便捷设置个人喜好与习惯. 在这一节中,希望能通过对捆绑包(bu ...
- iOS开发--应用设置及用户默认设置——转载
[链接]iOS开发--应用设置及用户默认设置[1.bundlehttp://www.jianshu.com/p/6f2913f6b218 在iphone里面,应用都会在“设置”里面有个专属的应用设置, ...
随机推荐
- 错误内存【读书笔记】C程序中常见的内存操作有关的典型编程错误
题记:写这篇博客要主是加深自己对错误内存的认识和总结实现算法时的一些验经和训教,如果有错误请指出,万分感谢. 对C/C++程序员来讲,内存管理是个不小的挑战,绝对值得慎之又慎,否则让由上万行代码构成的 ...
- 很近没读书了,读书笔记之<<大道至简>>
空闲时间不想虚度,不知道干啥的时候,就读读存在移动硬盘里的电子书吧,已经放了N久了,不知道什么时候放的,好像是大学刚毕业的时候下载的,...... 好久...... 现在才去读..是不是太晚了.... ...
- NEUOJ 1117: Ready to declare(单调队列)
1117: Ready to declare 时间限制: 1 Sec 内存限制: 128 MB 提交: 358 解决: 41 [提交][状态][pid=1117" style=" ...
- 《C语言编写 学生成绩管理系统》
/* (程序头部凝视開始) * 程序的版权和版本号声明部分 * Copyright (c) 2011, 烟台大学计算机学院学生 * All rights reserved. * 文件名: 学生成绩管理 ...
- PI-webservice06-调用外部webservice过程中注意问题
1,SAP与.NET系统之间通过webservice来进行数据交互的过程中,格式是有要求的,要求.NET发布出来的webservice中的数据是用list来进行传输的,不能用datatable和lis ...
- 【原创】测试不同浏览器播放canvas动画的平滑程度
Canvas无疑是HTML5开放式网络平台最激动人心的技术之一.目前,除了IE8以外,各类浏览器的新版本都支持HTML5 Canvas. 程序员需要通过Javascript调用Canvas API.基 ...
- IT人才什么最重要
做人最重要 做人最主要的一条就是尊重别人 不尊重别人,一般都是产生于自己认为自己别别人强,认为别人总是犯一些非常二的错误,于是就不自觉的通过言语.表情.反应等一些细节流露出来 这种人时间长了就会没人愿 ...
- 169 Majority Element [LeetCode Java实现]
题目链接:majority-element /** * Given an array of size n, find the majority element. The majority elemen ...
- Angular 1.2.27在IE7下的兼容问题
最近负责公司的一个国外项目,老外指定要用angular,并且要兼容到IE7. 项目使用的是Angular版本是1.2.27,为了能在IE7下跑,需要做如下配置 1. 加载json2.js 2. 加载h ...
- mysqldump原理0