Cocos2d-x使用UserDefault数据持久化实例:保存背景音乐和音效设置
2023-09-14 08:59:50 时间
span >
我们通过一个实例介绍一下在游戏项目中如何使用UserDefault。如图所示在Setting场景中可以设置是否播放背景音乐和音效现在我们将它完善将选择的状态保存到UserDefault中。
![](http://img.blog.csdn.net/20141020201928359)
![](http://img.blog.csdn.net/20141020201943828)
设置背景音乐与音效上图HelloWorld场景、下图Setting场景我们需要定义两个宏作为键其中SOUND_KEY是音效状态键MUSIC_KEY是背景音乐播放状态键。
#define SOUND_KEY "sound_key"
#define MUSIC_KEY "music_key"
但是这两个宏是需要在所有使用cpp文件中使用我们可以创建一个头文件把这些宏等都声明在这个头文件中这个头文件SystemHeader.h代码如下
#include "SimpleAudioEngine.h"
#define SOUND_KEY "sound_key"
#define MUSIC_KEY "music_key"
其中我们声明了两个宏还有包含头文件SimpleAudioEngine.h头文件SimpleAudioEngine.h是文件使用CocosDenshion引擎所需要的。
在Visual Studio 2012中添加SystemHeader.h文件过程是。首先打开解决方案中的HelloWorld工程右键点击Classes在右键菜单中选择“添加”→ “新建项”如图14-8所示。
在弹出对话框中选择“Visual C++ ”→“头文件(.h) ”, 在下面名称中输入“SystemHeader.h”然后点击“添加”按钮添加头文件。
添加SystemHeader.h文件
添加SystemHeader.h文件对话框在使用的时候我们需要将SystemHeader.h头文件添加到HelloWorldScene.h和SettingScene.h头文件中示例代码如下
下面我们看看HelloWorld场景HelloWorldScene.cpp主要代码如下
上述第①、②、③行代码中UserDefault::getInstance()- getBoolForKey(SOUND_KEY)是获得sound_key键值通过取出布尔值判断是否播放音效。第④行代码UserDefault::getInstance()- getBoolForKey(MUSIC_KEY)是获得music_key键值通过取出布尔值判断是否播放背景音乐。
下面我们再看看Setting场景SettingScene.cpp中的init()主要代码如下
上述代码是设置开关菜单的状态第①~③行代码是设置背景音乐开关菜单其中第②行代码是设置开关菜单为Off否则通过第③行代码设置状态为On。第④~⑥行代码是设置音效开关菜单其中第⑤行代码是设置开关菜单为Off否则通过第⑥行代码设置状态为On。
SettingScene.cpp中的点击音效开关菜单代码如下
上述代码第①行判断音效开状态为true情况下通过defaults- setBoolForKey(SOUND_KEY, false)语句设置false否则通过第③行代码defaults- setBoolForKey(SOUND_KEY, true)语句设置true同时通过第④行代码播放音效。
SettingScene.cpp中的点击背景音乐开关菜单代码如下
上述代码第①~②行是设置背景音乐开关菜单。代码与点击音效开关菜单类似不再解释。还有SettingScene.cpp中的其它主要代码如下
上述代码第①行menuOkCallback是点击Ok菜单回调函数其中第②行代码是获得sound_key键值通过取出布尔值判断是否播放音效。第③行代码onEnterTransitionDidFinish函数是在进入层而且过渡动画结束时候调用第④行代码是获得music_key键值通过取出布尔值判断是否播放背景音乐。
更多精彩视频课程请关注智捷课堂Cocos课程http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群257760386
几种播放视频文件的方式(一) —— 总结播放视频的几种方式(一)几种播放视频文件的方式(二) —— 基于MediaPlayer框架的视频播放(一)几种播放视频文件的方式(三) —— 基于AVFoundation框架视频播放(一)几种播放视频文件的方式(...
几种播放音频文件的方式(一) —— 播放本地音乐几种播放音频文件的方式(二) —— 音效播放几种播放音频文件的方式(三) —— 网络音乐播放几种播放音频文件的方式(四) —— 音频队列服务(Audio Queue Services)(一)几种播放音频文...
用aliplayer如何实现视频的连续播放? 假如有多个视频,在上一个视频播放完毕时,自动播放下一个视频,要怎么处理的呢?需要按使用的播放器类型和切换的地址格式,采用不同的实现方式。 直播地址方式 这种方式最简单,h5和flash的行为都是一致的,只需要订阅 ended , 在ended事件里,调用loadByUrl方法, 参数为下一个视频的地址。
关东升 国内著名iOS/Cocos技术作家,iOS技术顾问,Cocos最有价值专家(CVP),智捷课堂首席培训专家。担任51CTO社区iOS技术顾问。 著有多部移动开发畅销书。
我们通过一个实例介绍一下在游戏项目中如何使用UserDefault。如图所示在Setting场景中可以设置是否播放背景音乐和音效现在我们将它完善将选择的状态保存到UserDefault中。
设置背景音乐与音效上图HelloWorld场景、下图Setting场景我们需要定义两个宏作为键其中SOUND_KEY是音效状态键MUSIC_KEY是背景音乐播放状态键。
#define SOUND_KEY "sound_key"
#define MUSIC_KEY "music_key"
但是这两个宏是需要在所有使用cpp文件中使用我们可以创建一个头文件把这些宏等都声明在这个头文件中这个头文件SystemHeader.h代码如下
#include "SimpleAudioEngine.h"
#define SOUND_KEY "sound_key"
#define MUSIC_KEY "music_key"
其中我们声明了两个宏还有包含头文件SimpleAudioEngine.h头文件SimpleAudioEngine.h是文件使用CocosDenshion引擎所需要的。
在Visual Studio 2012中添加SystemHeader.h文件过程是。首先打开解决方案中的HelloWorld工程右键点击Classes在右键菜单中选择“添加”→ “新建项”如图14-8所示。
在弹出对话框中选择“Visual C++ ”→“头文件(.h) ”, 在下面名称中输入“SystemHeader.h”然后点击“添加”按钮添加头文件。
添加SystemHeader.h文件对话框在使用的时候我们需要将SystemHeader.h头文件添加到HelloWorldScene.h和SettingScene.h头文件中示例代码如下
#ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__
#endif // __HELLOWORLD_SCENE_H__
下面我们看看HelloWorld场景HelloWorldScene.cpp主要代码如下
#include "HelloWorldScene.h"
auto sc = Setting::createScene(); auto reScene = TransitionJumpZoom::create(1.0f, sc); Director::getInstance()- pushScene(reScene);
if (UserDefault::getInstance()- getBoolForKey(SOUND_KEY)) { ① SimpleAudioEngine::getInstance()- playEffect("sound/Blip.wav");
log("Touch Help %p", item); if (UserDefault::getInstance()- getBoolForKey(SOUND_KEY)) { ② SimpleAudioEngine::getInstance()- playEffect("sound/Blip.wav");
log("Touch Start %p", item); if (UserDefault::getInstance()- getBoolForKey(SOUND_KEY)) { ③ SimpleAudioEngine::getInstance()- playEffect("sound/Blip.wav");
if (UserDefault::getInstance()- getBoolForKey(MUSIC_KEY)) { ④ SimpleAudioEngine::getInstance()- playBackgroundMusic("sound/Jazz.mp3", true);
}
上述第①、②、③行代码中UserDefault::getInstance()- getBoolForKey(SOUND_KEY)是获得sound_key键值通过取出布尔值判断是否播放音效。第④行代码UserDefault::getInstance()- getBoolForKey(MUSIC_KEY)是获得music_key键值通过取出布尔值判断是否播放背景音乐。
下面我们再看看Setting场景SettingScene.cpp中的init()主要代码如下
#include "SettingScene.h"
if (defaults- getBoolForKey(MUSIC_KEY)) { ① musicToggleMenuItem- setSelectedIndex(0); ② } else { musicToggleMenuItem- setSelectedIndex(1); ③
if (defaults- getBoolForKey(SOUND_KEY)) { ④ soundToggleMenuItem- setSelectedIndex(0); ⑤ } else { soundToggleMenuItem- setSelectedIndex(1); ⑥
}
上述代码是设置开关菜单的状态第①~③行代码是设置背景音乐开关菜单其中第②行代码是设置开关菜单为Off否则通过第③行代码设置状态为On。第④~⑥行代码是设置音效开关菜单其中第⑤行代码是设置开关菜单为Off否则通过第⑥行代码设置状态为On。
SettingScene.cpp中的点击音效开关菜单代码如下
void Setting::menuSoundToggleCallback(Ref* pSender) auto soundToggleMenuItem = (MenuItemToggle*)pSender; log("soundToggleMenuItem %d", soundToggleMenuItem- getSelectedIndex());
UserDefault *defaults = UserDefault::getInstance(); if (defaults- getBoolForKey(SOUND_KEY)) { ① defaults- setBoolForKey(SOUND_KEY, false); ② } else { defaults- setBoolForKey(SOUND_KEY, true); ③ SimpleAudioEngine::getInstance()- playEffect("sound/Blip.wav"); ④
}
上述代码第①行判断音效开状态为true情况下通过defaults- setBoolForKey(SOUND_KEY, false)语句设置false否则通过第③行代码defaults- setBoolForKey(SOUND_KEY, true)语句设置true同时通过第④行代码播放音效。
SettingScene.cpp中的点击背景音乐开关菜单代码如下
void Setting::menuMusicToggleCallback(Ref* pSender) auto musicToggleMenuItem = (MenuItemToggle*)pSender; log("musicToggleMenuItem %d", musicToggleMenuItem- getSelectedIndex());
UserDefault *defaults = UserDefault::getInstance(); if (defaults- getBoolForKey(MUSIC_KEY)) { ① defaults- setBoolForKey(MUSIC_KEY, false); SimpleAudioEngine::getInstance()- stopBackgroundMusic(); } else { defaults- setBoolForKey(MUSIC_KEY, true); SimpleAudioEngine::getInstance()- playBackgroundMusic("sound/Synth.mp3"); }
上述代码第①~②行是设置背景音乐开关菜单。代码与点击音效开关菜单类似不再解释。还有SettingScene.cpp中的其它主要代码如下
void Setting::onEnter() Layer::onEnter(); log("Setting onEnter");
if (UserDefault::getInstance()- getBoolForKey(SOUND_KEY)) { ② SimpleAudioEngine::getInstance()- playEffect("sound/Blip.wav");
//播放 SimpleAudioEngine::getInstance()- playBackgroundMusic("sound/Synth.mp3", true);
}
上述代码第①行menuOkCallback是点击Ok菜单回调函数其中第②行代码是获得sound_key键值通过取出布尔值判断是否播放音效。第③行代码onEnterTransitionDidFinish函数是在进入层而且过渡动画结束时候调用第④行代码是获得music_key键值通过取出布尔值判断是否播放背景音乐。
我们可以运行一下先将状态保存然后重新运行游戏看看是否能够保持状态。我们还可以到 Cocos2d-x工程目录 \proj.win32\Debug.win32目录下看看是否成功生成了UserDefault.xml文件。
更多精彩视频课程请关注智捷课堂Cocos课程http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群257760386
《Cocos2d-x实战 C++卷》现已上线各大商店均已开售
京东http://item.jd.com/11584534.html
当当http://product.dangdang.com/23606265.html
互动出版网http://product.china-pub.com/3770734
《Cocos2d-x实战 C++卷》源码及样章下载地址
源码下载地址http://51work6.com/forum.php?mod=viewthread tid=1155 extra=page%3D1
样章下载地址http://51work6.com/forum.php?mod=viewthread tid=1157 extra=page%3D1
欢迎关注智捷iOS课堂微信公共平台几种播放视频文件的方式(一) —— 总结播放视频的几种方式(一)几种播放视频文件的方式(二) —— 基于MediaPlayer框架的视频播放(一)几种播放视频文件的方式(三) —— 基于AVFoundation框架视频播放(一)几种播放视频文件的方式(...
几种播放音频文件的方式(一) —— 播放本地音乐几种播放音频文件的方式(二) —— 音效播放几种播放音频文件的方式(三) —— 网络音乐播放几种播放音频文件的方式(四) —— 音频队列服务(Audio Queue Services)(一)几种播放音频文...
用aliplayer如何实现视频的连续播放? 假如有多个视频,在上一个视频播放完毕时,自动播放下一个视频,要怎么处理的呢?需要按使用的播放器类型和切换的地址格式,采用不同的实现方式。 直播地址方式 这种方式最简单,h5和flash的行为都是一致的,只需要订阅 ended , 在ended事件里,调用loadByUrl方法, 参数为下一个视频的地址。
关东升 国内著名iOS/Cocos技术作家,iOS技术顾问,Cocos最有价值专家(CVP),智捷课堂首席培训专家。担任51CTO社区iOS技术顾问。 著有多部移动开发畅销书。
相关文章
- html导航栏纵向代码,html横向导航栏怎么做?横向导航条代码实例
- shell中的while循环实例[通俗易懂]
- 数据仓库与数据挖掘的一些基本概念是_数据挖掘的实例
- DFP 数据转发协议应用实例6.LoRA 网关跨区域转发
- Oracle表中重复数据去重的方法实例详解
- Spring MVC JSON数据交互(附带实例)
- 如何启动Oracle中多个实例(oracle启动多个实例)
- Oracle实例创建指南:轻松实现实例创建(oracle怎么创建实例)
- MySQL实例:快速免费下载(mysql实例下载)
- SQL Server多实例实践:最佳数据库部署方案(sqlserver多实例)
- php获取新浪微博数据API实例
- php使用curl发送json格式数据实例
- JqueryAjax解析XML数据(同步及异步调用)简单实例
- Java8新特性lambda表达式有什么用(用法实例)
- PythonORM框架SQLAlchemy学习笔记之数据查询实例
- C++判断pe文件实例
- php单态设计模式(单例模式)实例
- Pythonmultiprocessing.Manager介绍和实例(进程间共享数据)
- ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
- C++利用stringstream进行数据类型转换实例
- yii实现创建验证码实例解析
- C#实现对Json字符串处理实例