文档章节

《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音

爱琴海之女妖
 爱琴海之女妖
发布于 2016/02/16 21:10
字数 750
阅读 143
收藏 0

   之前的内容主要都是介绍如何在屏幕上显示图像,事实上除了图像之外,音乐的播放也可以被理解为一种显示的方式,本节将学习在Cocos2d-x中播放声音的方法。

1)在HelloWorld.h中对HelloWorld类进行如下定义:

class HelloWorld : public Cocos2d::Layer
{
public:
       bool is_paused;
    static Cocos2d::Scene* createScene();
    virtual bool init();
       void play(Cocos2d::Object* pSender);         //播放音乐
       void stop(Cocos2d::Object* pSender);         //停止音乐
       void pause(Cocos2d::Object* pSender);              //暂停
    CREATE_FUNC(HelloWorld);
};

2)在HelloWorldScene.cpp中实现这些方法,如范例3-7所示,完整代码可见源文件本章目录下的项目ChapterThree05

【范例3-7 Cocos2d-x中实现音乐的播放和暂停等操作】

#include "HelloWorldScene.h"
#include "SimpleAudioEngine.h"
USING_NS_CC;
Scene* HelloWorld::createScene()
{
    auto scene = Scene::create();
    auto layer = HelloWorld::create();
    scene->addChild(layer);
    return scene;
}
bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
       is_paused = false;
       //播放按钮
       auto* label_play = Label::create("play", "Arial", 40);
       auto* pLabel_play = MenuItemLabel::create(label_play, this, menu_selector(HelloWorld::play));
       auto* button_play = Menu::create(pLabel_play, NULL);
       button_play->setPosition(160,180);
       addChild(button_play);
       //暂停按钮
       auto* label_pause = Label::create("pause", "Arial", 40);
       auto* pLabel_pause = MenuItemLabel::create(label_pause, this, menu_selector(HelloWorld::pause
       auto* button_pause = Menu::create(pLabel_pause, NULL);
       button_pause->setPosition(320,180);
       addChild(button_pause);30
       //停止按钮
       auto* label_stop = Label::create("stop", "Arial", 40);
       auto* pLabel_stop = MenuItemLabel::create(label_stop, this, menu_selector(HelloWorld::stop));
       auto* button_stop = Menu::create(pLabel_stop, NULL);
       button_stop->setPosition(480,180);
       addChild(button_stop);
       return true;
}
void HelloWorld::play(Cocos2d::Object* pSender)
{     //如果背景音乐被暂停则继续播放
       if (is_paused)
       {
              CocosDenshion::SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
       }
       else
       {     //否则重新播放
              CocosDenshion::SimpleAudioEngine::sharedEngine()->playBackgroundMusic("music.mp3");
       }
       is_paused = false;
}
void HelloWorld::stop(Cocos2d::Object* pSender)
{     //停止音乐
       is_paused = false;
       CocosDenshion::SimpleAudioEngine::sharedEngine()->stopBackgroundMusic();
}
void HelloWorld::pause(Cocos2d::Object* pSender)
{     //暂停播放音乐
       is_paused = true;
       CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}

本例运行后的界面如图3-12所示,点击屏幕上的3个标签按钮则会执行音乐的播放、暂停等操作。

3-12 可以点击按钮进行音乐的播放暂停等操作

  在使用Cocos2d-x播放音乐时需要引入文件SimpleAudioEngine.h(如范例第02行所示),之后就可以使用如范例第42465358行所示的代码来对音乐进行操作了。因为代码非常简单,这里便不再做太多介绍了。

  现在需要读者思考一个问题,为什么在播放音乐时使用的方法是playBackgroundMusic而不是playMusicBackground是背景的意思,是不是说这个方法只能用来播放背景音乐?那么什么音乐不是背景音乐呢?

  实际上该方法是可以播放任何音乐的,但是比较适合播放大段的音乐,而在游戏中大段的音乐常常被用来作为背景音乐使用。在游戏中一些短小的音乐(如怪物的叫声、打斗声等)则是要通过其他方法来播放的,这些内容将在下一节介绍。

自学必备!!


© 著作权归作者所有

爱琴海之女妖
粉丝 1
博文 10
码字总数 6939
作品 0
东城
私信 提问
OSC 第 115 期高手问答 -- 移动手游 Cocos2d-x 开发大家谈

OSCHINA 本期高手问答(4月5日-4月13日)我们请来了 @isapanda (欧桐桐)为大家解答关于移动手游Cocos2dx和移动跨平台游戏前景方面的问题。 @isapanda ,毕业于大连海事大学信息管理与信息系统...

开源中国股侠
2016/04/05
3.6K
37
《Cocos2d-x实战 C++卷》上线了-源码-样章-感谢大家的支持

《Cocos2d-x实战 C++卷》上线了 感谢大家一直以来的支持! 全面介绍Cocos开发技巧,采用Cocos2d-x3.2版本,并且详细介绍跨平台移植已经多平台发布细节。 · 各大商店均开始销售: 京东:htt...

智捷课堂
2014/12/01
149
0
【手机游戏开发】分享《Cocos2D-X游戏开发技术精解(第2版)》电子版

内 容 提 要 Cocos2D-X是一款支持多平台的 2D 手机游戏引擎,支持iOS、Android、WinPhone等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 本书详细介绍如何使用Cocos...

不问旧梦
2015/11/19
148
0
【手机游戏开发】分享《Cocos2D-X游戏开发技术精解(第2版)》电子版

内 容 提 要: Cocos2D-X是一款支持多平台的 2D 手机游戏引擎,支持iOS、Android、WinPhone等众多平台。当前,很多移动平台流行的游戏,都是基于Cocos2D-X开发的。 本书详细介绍如何使用Coc...

不问旧梦
2015/11/19
1K
3
为回馈广大学员,智捷课堂买关老师Cocos2d-x课程送Cocos2d-x图书

为回馈广大学员,智捷课堂买关老师Cocos2d-x课程送Cocos2d-x图书 一、凡购买如下课程送一本图书: 1、 Cocos2d-x入门与提高视频教程Part 2 2、 Cocos2d-x数据持久化与网络通信Part 3 3、 Co...

tony关东升
2018/06/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

好程序员大数据教程分享Scala系列之模式匹配和样例类

好程序员大数据教程分享Scala系列之模式匹配和样例类 1.样例类 在Scala中样例类是一中特殊的类,样例类是不可变的, 可以通过值进行比较,可用于模式匹配。 定义一个样例类: 构造器中每一个...

好程序员官网
14分钟前
3
0
让nginx上的静态网页在访问的时候没有html后缀

需求背景: 公司产品小姐姐觉得这个访问带html后缀不专业,要求访问不带html后缀 nginx 配置 #原配置 location / { index index.html index.htm index.php; try_files $...

Linux_Anna
15分钟前
3
0
beetl的内置函数

函数调用Beetl内置函数请参考附录,以下列出了常用的函数date 返回一个java.util.Date类型的变量,如 date() 返回一个当前时间(对应java的java.util.Date); ${date( "2011-1-1" , "yy...

gantaos
16分钟前
3
0
spring cloud 2.x版本 Gateway自定义过滤器教程

前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 [toc] 本文基于前两篇文章eureka-server、eureka-client、eureka-ribbon、eureka-feign和spring-gataway的实现。 参考......

毛毛向前冲V5
19分钟前
3
0
VPGAME 的 Kubernetes 迁移实践

作者 | 伍冲斌 VPGAME 运维开发工程师 导读:VPGAME 是集赛事运营、媒体资讯、大数据分析、玩家社群、游戏周边等为一体的综合电竞服务平台。总部位于中国杭州,在上海和美国西雅图分别设立了...

阿里巴巴云原生
24分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部