上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗、按键音效等)则要通过playEffect来播放。本节使用该方法以及之前学到的菜单按钮的用法,制作了一个简单的“钢琴”游戏,其中部分代码如范例3-8所示,完整代码详见源文件本章目录下的ChapterThree06项目。

【范例3-8 利用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;
    }
       ; i <= ; i++)                                 //预加载7个音符的mp3文件
       {
              CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(
                                          String::createWithFormat("%d.mp3",i)->getCString());
       }
       //通过按钮,创建7个琴键
       auto* pButton1 = MenuItemImage::create("button1.png",
                                                               "button2.png",
                                                               this,
                                                               menu_selector(HelloWorld::note1));
       auto* button1 = Menu::create(pButton1, NULL);
       button1->setPosition(, );                           //设置按钮位置
       addChild(button1);
       /**此处省略了其他5个按钮的创建过程**/
       auto* pButton7 = MenuItemImage::create("button1.png",
                                                               "button2.png",
                                                               this,
                                                               menu_selector(HelloWorld::note7));
       auto* button7 = Menu::create(pButton7, NULL);
       button7->setPosition( +  * , );              //按钮x坐标为 50+90*i其中i为按键编号减1
       addChild(button7);
    return true;
}
//第一个按键的响应操作,播放第1个音符
void HelloWorld::note1(Cocos2d::Object* pSender)
{
       CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("1.mp3");
}
//此处省略了其他5个音符的响应操作
void HelloWorld::note7(Cocos2d::Object* pSender)
{
       CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect("7.mp3");
}

运行之后的界面如图3-13所示。当用户点击按键时按键将发生变化,并播放对应音符的声音效果。

图3-13 “钢琴”界面

图3-14 点击屏幕中的按键将播放音乐

播放这类较短音乐的方法与之前介绍的playBackgroundMusic方法是完全相同的,只不过要将方法名全部改为playEffect就可以了。

此外,由于这类音乐是要反复播放的,比如在钢琴中某个音符是要反复被播放的,而游戏中某些怪物的叫声也是要反复出现的。如果每次要调用playEffect时都会重新对音乐文件进行加载,这就造成了资源浪费,因此可以在场景初始化的时候对这些文件进行一个统一的预加载,如范例第17~22行所示。

提示:实际上在使用playBackgroundMusic方法时也需要对音乐进行预加载,只不过在之前的范例中被简化了。另外实际开发中还需要在程序退出时释放加载了的音乐,释放的方法为unloadEffect。

自学必备!!

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

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

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

《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴的更多相关文章

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

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

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

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

  3. Django 学习笔记之六 建立一个简单的博客应用程序

    最近在学习django时建立了一个简单的博客应用程序,现在把简单的步骤说一下.本人的用的版本是python 2.7.3和django 1.10.3,Windows10系统 1.首先通过命令建立项目和a ...

  4. Ruby学习笔记2 : 一个简单的Ruby网站,搭建ruby环境

    Ruby on Rails website 的基础是 请求-返回 循环. 首先是浏览器请求服务器, 第二步,Second, in our Rails application, the route ta ...

  5. [原创]java WEB学习笔记12:一个简单的serlet连接数据库实验

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  6. 【opencv学习笔记五】一个简单程序:图像读取与显示

    今天我们来学习一个最简单的程序,即从文件读取图像并且创建窗口显示该图像. 目录 [imread]图像读取 [namedWindow]创建window窗口 [imshow]图像显示 [imwrite]图 ...

  7. UNP学习笔记2——从一个简单的ECHO程序分析TCP客户/服务器之间的通信

    1 概述 编写一个简单的ECHO(回复)程序来分析TCP客户和服务器之间的通信流程,要求如下: 客户从标准输入读入一行文本,并发送给服务器 服务器从网络输入读取这个文本,并回复给客户 客户从网络输入读 ...

  8. cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

    一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...

  9. cocos2dx游戏开发——微信打飞机学习笔记(四)——GameScene的搭建

    一.创建文件 首先呢,就是那个创建新的.h 和 .cpp 的文件,然后可以起名为GameScene 最重要的就是一定要创建在Classes的目录下哦= =,别手抖= =. 二.GameScene.h和 ...

随机推荐

  1. 客户端对象模型之Excel数据导入到列表

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...

  2. CABasicAnimation使用总结

    CABasicAnimation使用总结 实例化 使用方法animationWithKeyPath:对 CABasicAnimation进行实例化,并指定Layer的属性作为关键路径进行注册. //围 ...

  3. 什么是设计模式?【php】

    原文地址:https://www.cnblogs.com/zhuiluoyu/p/5818974.html 什么是设计模式? 设计模式(Design Pattern)是一套被反复使用.多数人知晓的.经 ...

  4. transition(过渡)

    transition:过渡 渡过渡原理:原始状态a状态-向-最终结束状态b状态 格式:transition: all 1s linear; 过渡的四个参数: 1.参与过渡的属性(属性(width)/a ...

  5. python教程(六)·字符串

    我们已经学习了字符串的使用方法,我们还学习了使用索引和分片操作字符串,经历了这么长的时间,相信大家也有所掌握:本节将讨论并学习字符串的格式化与字符串的常用方法 字符串格式化 字符串是序列的一种,所以所 ...

  6. PTA(BasicLevel)-1006换个格式输出整数

      一  换格式输出整数 用字母 B 来表示“百”.字母 S 表示“十”,用 12...n 来表示不为零的个位数字 n(<10),换个格式来输出任一个不超过 3 位的正整数.例如 234 应该被 ...

  7. Framwork框架-网络客户端的使用

    1.引入头文件 #include "Comm.h" 2.派生自框架基类CProtocolCpMgr class NetManager : public CProtocolCpMgr ...

  8. 笔记(assert 断言)

    并发:在同一个时间段交替执行多个任务并行:在同一个时间点同时执行多个任务串行:同时执行的多个任务按顺序执行(换句话说就是一个任务执行完后才能执行下一个任务) #mysql limit用法: selec ...

  9. hash环/consistent hashing一致性哈希算法

        一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT)实现算法,设计目标是为了解决因特网中的热点(Hot spot)问题,初衷和CARP十分类似.一致性哈希修正了CARP使用的 ...

  10. node从搭建运行项目整体流程

    1. 初始化配置基本信息: npm init (自定义配置) npm init -y (一切配置采用默认值) 在当前目录产生package.json文件,有一个dependencies用来记录该项目所 ...