《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

《Cocos2d-x游戏开发实战精解》学习笔记2--在Cocos2d-x中显示一行文字

之前的内容主要都是介绍如何在屏幕上显示图像,事实上除了图像之外,音乐的播放也可以被理解为一种显示的方式,本节将学习在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();
       auto* pLabel_play = MenuItemLabel::create(label_play, this, menu_selector(HelloWorld::play));
       auto* button_play = Menu::create(pLabel_play, NULL);
       button_play->setPosition(,);
       addChild(button_play);
       //暂停按钮
       auto* label_pause = Label::create();
       auto* pLabel_pause = MenuItemLabel::create(label_pause, this, menu_selector(HelloWorld::pause
       auto* button_pause = Menu::create(pLabel_pause, NULL);
       button_pause->setPosition(,);
       addChild(button_pause);
       //停止按钮
       auto* label_stop = Label::create();
       auto* pLabel_stop = MenuItemLabel::create(label_stop, this, menu_selector(HelloWorld::stop));
       auto* button_stop = Menu::create(pLabel_stop, NULL);
       button_stop->setPosition(,);
       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行所示),之后就可以使用如范例第42、46、53、58行所示的代码来对音乐进行操作了。因为代码非常简单,这里便不再做太多介绍了。

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

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

《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音的更多相关文章

  1. 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴

    上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...

  2. 《Cocos2d-x游戏开发实战精解》学习笔记1--在Cocos2d中显示图像

    Cocos2d-x中的图像是通过精灵类来显示的.在Cocos2d-x中游戏中的每一个角色.怪物.道具都可以理解成是一个精灵,游戏背景作为一种特殊的单位将其理解成是一个精灵也没有什么不妥.在源文件本章目 ...

  3. 《Cocos2d-x游戏开发实战精解》学习笔记2--在Cocos2d-x中显示一行文字

    在Cocos2d-x中要显示文字就需要用到Label控件.在3.x版本的Cocos2d中,舍弃了之前版本所使用的LabelTTF.LabelAtlas.LabelBMFont 3个用于显示文字的类,而 ...

  4. iOS cocos2d 2游戏开发实战(第3版)书评

    2013是游戏爆发的一年,手游用户也是飞速暴增.虽然自己不做游戏,但也是时刻了解手机应用开发的新动向.看到CSDN的"写书评得技术图书赢下载分"活动,就申请了一本<iOS c ...

  5. cocos2dx游戏开发——微信打飞机学习笔记(三)——WelcomeScene的搭建

    一.场景与层的关系: cocos2dx的框架可以说主要由导演,场景,层,精灵来构成: 1.其中导演,意如其名,就是操控整个游戏的一个单例,管理着整个游戏. 2.场景就像电影的一幕剧情,所以说,懂得如何 ...

  6. cocos2dx游戏开发——微信打飞机学习笔记(七)——Enemy的搭建

    一.文件创建~ Enemy.h Enemy.cpp 二.How to do? 由于我是已经完成成个游戏的功能,所以我会将游戏中enemy所需要的很多功能基本上都先考虑到了,如果大家自己在做的时候也许没 ...

  7. AS开发实战第二章学习笔记——其他

    第二章学习笔记(1.19-1.22)像素Android支持的像素单位主要有px(像素).in(英寸).mm(毫米).pt(磅,1/72英寸).dp(与设备无关的显示单位).dip(就是dp).sp(用 ...

  8. [Qt及Qt Quick开发实战精解] 第1章 多文档编辑器

      这一章的例子是对<Qt Creator快速人门>基础应用篇各章节知识的综合应用, 也是一个规范的实例程序.之所以说其规范,是因为在这个程序中,我们对菜单什么时候可用/什么时候不可用.关 ...

  9. QT开发实战精解

    无法打开包括文件<QApplication> No such file or directory  这一问题 解决办法,使用QApplication时必须在项目pro文件中添加一句 QT ...

随机推荐

  1. Linux Shell常用技巧(八)

    十八.  和系统运行状况相关的Shell命令:    1.  Linux的实时监测命令(watch):    watch 是一个非常实用的命令,可以帮你实时监测一个命令的运行结果,省得一遍又一遍的手动 ...

  2. [iOS]一些第三方库

    BHInfiniteScrollView 地址 https://github.com/qylibohao/BHInfiniteScrollView 功能 图片轮播 TZImagePickerContr ...

  3. MySQL的库表详细操作

    MySQL数据库 本节目录 一 库操作 二 表操作 三 行操作 一 库操作 1.创建数据库 1.1 语法 CREATE DATABASE 数据库名 charset utf8; 1.2 数据库命名规则 ...

  4. 偏前端-纯css,手写轮播-(焦点切换 和 自动轮播 只可选择一种,两者不可共存)

    现在我们一般都是在网上找个轮播插件,各种功能应有尽有,是吧!!~大家似乎已经生疏了手写是什么感觉.万一哪天想不起来,人家要手写,就尴尬了!~~跟我一起复习一下吧 不多说:效果图看一下: 高度不能是固定 ...

  5. 第一章 程序设计和C语言(笔记)

    一.程序和程序语言 程序:完成某项事务所预设的活动方式和活动过程. 程序设计:人们描述计算机要做的工作. 对于工作过程的细节动作描述就是一个“程序”. 在一个程序描述中,总有一批预先假定的“基本动作” ...

  6. MongoDB数据库 : 管道,用户管理,副本集等

    聚合(aggregate): db.集合.aggregate([{管道:{表达式}}]) db.集合.aggregate([ {管道1:{表达式1}}, {管道2:{表达式2}}, ... ...]) ...

  7. A1033

    找出最小开销. 思路: 出发点的加油站编号设为0,终点的加油站编号设为n,其他加油站编号按距离依次排序. 如果0号加油站的距离!=0,则无法出发,行驶距离为0. 从起点开始,寻找规则为,如果存在油价小 ...

  8. SQL学习笔记:分块提取查询结果

    实践中,数据库中可能有数十亿条记录.查询结果有可能达到千万条.如果用dbGetQuery( ) 一次性取出所有查询结果,内存可能吃不消.但是,如果容许分块处理数据来完成任务,那么下述方法不失为一个好的 ...

  9. Hibernate学习笔记四

    1 整合log4j(了解) l slf4j 核心jar  : slf4j-api-1.6.1.jar .slf4j是日志框架,将其他优秀的日志第三方进行整合. l 整合导入jar包 log4j 核心包 ...

  10. 20155202 实验四 Android开发基础

    20155202 实验四 Android开发基础 实验内容 1.基于Android Studio开发简单的Android应用并部署测试; 2.了解Android.组件.布局管理器的使用: 3.掌握An ...