设置场景(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实战 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
相关推荐
本书会介绍Cocos2d-x的音频API,包括音乐播放、音效处理以及音效资源的加载和管理。 此外,书中还会涉及用户输入处理、触摸事件、键盘事件的响应,以及如何实现游戏的交互功能。对于网络编程,Cocos2d-x提供了网络...
6. **音频和音乐**:介绍如何在Cocos2d-x中播放背景音乐和音效,以及音乐的控制和管理。 7. **网络与存储**:讨论如何进行网络通信,如下载更新、保存和读取游戏数据。 8. **性能优化**:提供关于代码优化、内存...
9. **音频播放**:掌握音频管理,包括背景音乐、音效的播放与控制,提升游戏体验。 10. **性能优化**:探讨性能分析工具的使用,以及如何优化代码执行效率、减少内存占用和CPU负载。 11. **发布与打包**:学习项目...
实战C++卷可能包括了对Cocos2d-x框架中关键概念、类和API的实践指导,例如游戏场景、精灵、动画、物理引擎、粒子系统、音效和用户界面等。开发者可以在这本书中找到如何使用C++语言和Cocos2d-x框架结合的实例。 5. ...
cocos2d-x支持播放背景音乐和音效,理解如何加载、播放和控制音频,能提升游戏的沉浸感。 八、网络和存储 cocos2d-x提供了网络接口,可以实现数据的发送和接收,这对于网络游戏和在线功能至关重要。同时,学习如何...
本笔记将深入探讨Cocos2D-X中的音乐和音效处理,帮助开发者更好地理解如何在游戏项目中实现音频功能。 在Cocos2D-X中,音乐和音效的管理主要通过`cocos2d::AudioEngine`类来完成。这个类提供了一系列的方法用于播放...
《cocos2d-x游戏实例-简易动作游戏》 cocos2d-x是一款跨平台的2D游戏开发框架,基于C++,同时支持Lua和JavaScript等脚本语言,广泛应用于移动设备上的游戏开发。本实例将带你深入理解如何使用cocos2d-x创建一个简易...
7. **音频处理**:游戏中的背景音乐和音效也是重要组成部分,cocos2d-x的AudioEngine模块可以方便地播放和管理音频资源。 8. **跨平台发布**:cocos2d-x支持多平台发布,通过同一套代码可以生成不同平台的应用。...
在Cocos2d-x中,你可以通过创建`cc::Sprite`类实例来表示这些对象。鸟的飞行动画可以通过多个精灵帧来实现,而管道则可以作为静态精灵进行显示。 4. **物理引擎**:为了实现鸟的飞行效果,我们需要使用Cocos2d-x...
首先,书中会介绍Cocos2d-x的基础知识,包括安装环境、创建项目、设置资源路径等,使读者对Cocos2d-x的开发环境有一个全面的认识。这一部分还会讲解如何使用Cocos Studio进行图形界面设计,以及如何将设计成果导入到...
总之,《cocos2d-x3.2贪吃蛇游戏代码与资源》是学习cocos2d-x引擎的理想实践案例,它涵盖了场景管理、图形绘制、事件处理、资源管理等多个重要知识点,对于初学者来说,通过分析和修改这个游戏的源码,能够深入理解...
《cocos2d-x学习笔记》 在学习cocos2d-x时,了解其核心组件和工作流程至关重要。AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨...
Cocos2d-x是一款开源的游戏开发框架,广泛用于创建2D游戏、演示程序和其他图形交互应用。...对于想要深入研究Cocos2d-x游戏开发或者对《萝莉快跑》这款游戏有兴趣的人来说,这是一个有价值的参考实例。
游戏中的音频管理也是Cocos2d-X的重要部分,它支持音乐和音效的播放,提供简单易用的接口进行控制。同时,Cocos2d-X的网络模块则方便开发者实现在线功能,如数据同步、排行榜、多人联机等。 除此之外,Cocos2d-X...
4. **音频处理**:介绍Cocos2d-x的音频管理,如何播放背景音乐、音效,并进行音量控制。 5. **用户输入与交互**:讨论处理触摸事件、键盘事件的方法,以及如何创建响应玩家操作的游戏逻辑。 6. **网络编程**:包括...
cocos2d-x提供了`AudioEngine`类来播放音效和背景音乐。我们可以在游戏事件发生时,如射击、敌人死亡等,播放对应的音效。 最后,游戏的性能优化也非常重要。cocos2d-x提供了一些工具和技巧来帮助开发者优化帧率,...
3. **图形与动画**:详细介绍如何使用Cocos2d-x绘制2D图形,包括精灵(Sprite)、纹理(Texture)、图集(Atlas)、动作(Action)和动画(Animation),并提供实例演示如何创建复杂的视觉效果。 4. **物理引擎**:...
本实例“萝莉快跑”是基于Cocos2D-x 2.0.4版本实现的一个游戏项目,旨在帮助开发者了解和掌握Cocos2D-x的游戏开发技术。通过分析和实践这个实例,我们可以深入学习到Cocos2D-x中的关键概念和功能。 1. **场景和层的...
《COCOS2D-X 2.2 实例:瞄星大战》是基于Cocos2d-x游戏开发框架的一个经典实例,旨在帮助开发者理解和掌握如何使用Cocos2d-x 2.2版本来构建游戏。Cocos2d-x是一款开源的游戏引擎,广泛应用于2D游戏的开发,尤其在...
6. **声音与音乐**:教授如何在游戏中添加背景音乐和音效,提升玩家体验。 7. **网络通信**:简述Cocos2d-x中实现网络通信的方法,包括HTTP请求、Socket编程等。 8. **性能优化**:分享提高游戏运行效率的经验...