【目标】:制作一个简单的音乐炫台式的游戏

一、游戏概念

游戏的设想是来自于一个简单的FLASH游戏。我这边基本做完了以后发现android平台也有一款类似的游戏《音乐炫台》。其界面和扫雷类似,是一个方格阵,被选中的格子会随着节拍发出声响,并且发出声响时会有一定的特效来显示。玩家可以通过选中不同的格子来组合成各种音乐。

做这个游戏的目的有两个:一是学习音效的实现,二是学习特效的实现。

二、游戏机制的具体研究

游戏界面如下:

如上所述,这里是一个10*10的方格阵,方格未选中时为灰色,选中为白色。用户点击一个方格可以将其选中或反选,支持通过滑动进行多选。

游戏开始后,会扫描第一列,然后隔500ms扫描第二列,依次类推,被扫描的列上白色的格子会发出声响,不同的行上的格子发出的声响是不同的,但是相同的行上发出的声音是相同的。在发出声响的同时,该格子会产生一个cocos2D演示程序中 explodingRing 的特效。

三、声音

1、格式的选择

这个游戏面临的第一个问题就是如何准备音频资源。我们先看看cocos2d-x支持哪些“音效”格式(这里强调音效,因为背景音乐貌似还不一样):

android:MP3、WAV、OGG

WIN32:MP3、WAV、MID

IOS:MP3、CAF(未测试)

需要注意的是WIN32上并不支持 OGG 格式,我试过一次,虽然不会crash,但完全放不出来声音。虽然在ANDROID上OGG格式最优,不过最终我这里选择的是全部使用 MP3格式,方便在WIN32上调试,当然最后转成 OGG格式也并不麻烦。

2、音频文件的制作

我们的目标只是要制作10个300ms左右的单音符乐曲。不太清楚真正游戏开发使用什么工具,我这里使用的是 Band in a Box 2012。

进入后感觉相当专业,幸好小时候学过琴还有点概念。这里只说明和本次目标相关的部分:

对于我们的目标而言,乐曲长度只需要一节,不需要循环,伴奏什么的也完全不需要,所以点击伴奏风格,取消 “style is enabled”,然后将乐曲长度设置为1,循环次数设为1,取消循环的勾选,节奏可以根据需要调整,我貌似设置的是300。

然后从 edit -> set Time Signature 来设置节拍,这里求短,设置成1/4拍即可。

接着点击那个音符按钮,编辑当前小节(事实上也是仅存的唯一一小节了),界面如下。

首先点击进入编辑模式,此时,点击五线谱上任意位置,都会在该位置上出现对应音符,如果点错了,还可以拖动该音符。不过默认长度是满长度的,可以通过右键菜单中 Edit Node 来改变 Duration。

编辑完成后可以点击播放试听一下,如果OK的话,就可以点 FILE 下的 Make Standard MIDI File,或者直接F6,来输出成一个 MIDI文件,注意我们这里只需要一个音节,所以在确认输出时,在 options 中,将 Include 2 bar lead-in in MIDI file 给去掉。

3、音频文件的转换

得到的MID文件,在android平台是不好用的,建议转换成OGG或者MP3。这里使用 MID to MP3 这样一款软件首先转为MP3格式。

得到这样一个MP3格式之后,就可以使用其他工具来进行任意转换了,这里强烈推荐 魔影工厂。好用不收费,简直霸道。唯一需要说明的是,在转换的时候是可以指定音量的放大倍数的,如果源音效的声音不够大,那么现在补救也来得及。

4、音频文件的播放

在cocos中,播放音效比较的简单,首先将该音频文件放到资源文件夹下。然后在代码中调用

    CocosDenshion::SimpleAudioEngine::sharedEngine()->playEffect(m_SoundFile);

依赖的头文件是 SimpleAudioEngine.h。参数是文件名称,可以是绝对路径(如果不放在默认的资源文件夹下这种比较有用)。另外还有一个两参数的版本,可以设定是否一直循环播放。

如果想要进行一定程度的优化,还可以预先加载这些音效文件:

void SoundBlock::initSoundPool() {for ( int i = 0; i < 10; i ++ )CocosDenshion::SimpleAudioEngine::sharedEngine()->preloadEffect(SOUND_FILES[i]);
}

当然在结束的时候不要忘记释放这些资源:

void SoundBlock::freeSoundPool() {for ( int i = 0; i < 10; i ++ )CocosDenshion::SimpleAudioEngine::sharedEngine()->unloadEffect(SOUND_FILES[i]);
}

实际上这个 SimpleAudioEngine 还是比较弱的,支持的功能不多。如果是在 IOS上的话,还可以使用 CDAudioManager,那个要强大不少。

四、粒子特效

音效已经准备好,现在开始准备视觉上的特效。这里打算使用简单的粒子特效。

1、基本的粒子特效

cocos中已经准备了几种常用的粒子特效,可以参考 CCParticleExamples.cpp。例如CCParticleGalaxy之类的。使用方法如下:

    emitter = CCParticleGalaxy::create();emitter->retain();    //注意这里的retainemitter->setTexture(CCTextureCache::sharedTextureCache()->addImage("fire.png"));emitter->setPosition(ccp(m_Size/2, m_Size/2));emitter->setDuration(0.3f);emitter->setAutoRemoveOnFinish(true);addChild(emitter, 10);

代码基本可以自解释,就不多说了。

2、额外篇:水波式网格动作

除了粒子特效以外,网格动作也可以实现很多特效效果。这个可以参考 CCActionTiledGrid.cpp。网格动作实际上也是一种动作,可以通过 runAction来执行。例如如果要使用水波效果的话,就可以采用 CCWavesTiles3D 来实现。

3、exploding Ring

以我目前的理解,粒子效果的关键时机上在于对 CCParticleSystem 中的大量参数的调节,cocos为了方便程序员,除了可以在代码中逐个指定之外,还可以通过编写list来指定各个参数值。我这里的特效XML是直接COPY的 TESTCPP工程下的 ExplodingRing.plist。在代码中则是按照如下方式指定:

    //播放特效emitter = new CCParticleSystemQuad();emitter->initWithFile("ExplodingRing.plist");emitter->setPosition(ccp(m_Size/2, m_Size/2));emitter->setAutoRemoveOnFinish(true);addChild(emitter, 10);

不过,原来的 ExplodingRing中设定的最大粒子数是800多,由于我这里设计是每个要发声的方块都要产生粒子效果,所以当多个方块同时产生粒子效果时,帧率只有可怜的十几帧。可以根据实际情况修改该参数值。

五、代码实现

搞定了上面的两步,剩下的都很简单,见源码。

【cocos2D-x学习】9.音乐炫台——音效与特效相关推荐

  1. 《Deep Learning Techniques for Music Generation – A Survey》深度学习用于音乐生成——书籍阅读笔记(一)Chapter 1

    <Deep Learning Techniques for Music Generation – A Survey>深度学习用于音乐生成--书籍阅读笔记(一)Chapter 1 关于这本书 ...

  2. 基于深度学习的音乐推荐系统

    ♚ 作者:沂水寒城,CSDN博客专家,个人研究方向:机器学习.深度学习.NLP.CV Blog: http://yishuihancheng.blog.csdn.net 推荐系统在我们日常生活中发挥着 ...

  3. 深度学习在音乐信息检索(MIR)方向的应用介绍(下)

    原文链接:A Tutorial on Deep Learning for Music Information Retriveal 深度学习在音乐信息检索(MIR)方向的应用介绍(上) 5 解决MIR问 ...

  4. 利用AudioContext来实现网易云音乐的鲸鱼音效

    一直觉得网易云音乐的用户体验是很不错的,很早就注意到了里面的鲸鱼音效,如下图,就是一个环形的跟着音乐节拍跳动的特效. gif动图可能效果不太理想,可以直接在手机上体验 身为前端凭着本能的好奇心和探索心 ...

  5. 深度学习的音乐创作:回顾

    基于深度学习的音乐创作:综述 原文链接:https://arxiv.org/pdf/2108.12290.pdf 摘要 创作复杂的艺术作品(例如音乐作品)需要展现真正的创造力,而创造力取决于与音乐语言 ...

  6. 基于协同过滤算法和深度学习的音乐推荐

    基于协同过滤算法和深度学习的音乐推荐 协同过滤 音乐推荐 深度学习 音乐检索 文章目录 基于协同过滤算法和深度学习的音乐推荐 Github 地址 微信小程序版实现 介绍 参考项目 技术栈 Docker ...

  7. [开源项目]Android_炫酷的3D音乐播放器_各种特效OpenGL

    这是 我见过最炫的一个音乐播放器了.里面包含各种特效OpenGL,先上图片...看看大家的反应. 3Dmusic3.png(48.63 KB, 下载次数: 34) 炫酷的3D音乐播放器_各种特效Ope ...

  8. H5炫酷特效系列4——炫酷粒子变化特效

    这个示例虽然没有相对比较实用的特性,但是表现出来的效果确实非常震撼眼球.先上效果图,让各位同胞感受一下: 特效的表现感很强,有兴趣的读者可以仔细学习一下下面的代码,尝试着理解其中的逻辑. <!D ...

  9. 【有利可图网】PS实战教程52:巧用PS设计打造一个酷炫的喷溅海报特效!

    本篇教大家如何巧用PS设计打造一个酷炫的喷溅海报特效教学!教程主要是运用到了蒙版和笔刷技巧,学习掌握,可以灵活运用到其它设计中,感兴趣的童鞋赶快收走试试看,需转学起来吧!

最新文章

  1. win7-64系统安装oracle 11G客户端
  2. 怀旧服新开服务器最新,暴雪官方发大招,怀旧服新开11个新服务器
  3. 分组密码Feistel结构补充说明
  4. kafka安装_安装Kafka
  5. HTTP 和 HTTPS
  6. Sentinel(十三)之动态规则扩展
  7. matlab能流图,有会用MATLAB写海流图的程序吗
  8. Emotet***病毒升级,对抗杀毒软件的能力再次增强
  9. SQL语句之表的创建和使用
  10. 游戏夜读 | 游戏关卡设计师
  11. Prizmo Pro for Mac(OCR文字扫描识别软件)
  12. 徐思201771010132《面向对象程序设计(java)》第九周学习总结
  13. xp如何添加桌面计算机回收站,WinXP如何找到回收站图标?
  14. Node.js详细下载与安装
  15. XSL的一些基础知识!
  16. 云服务器的IP是显示哪里,云服务器的ip在哪里看
  17. 用python画宇宙_快来用Python和Blender超简单绘制你的宇宙飞船!
  18. 推荐系统---缓存---人人网
  19. ERROR org.springframework.boot.diagnostics.LoggingFailureAnalysisReporter
  20. 2019蓝桥杯B组省赛反思总结

热门文章

  1. Java如何创建文件?java创建文件流程图文详解!
  2. 分享十六进制颜色代码表
  3. HTML Table标签 Div属性 a标签
  4. YZOI 队员论文精选
  5. php mysql环境 xp_PHP环境配置 for winXP(IIS PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置...
  6. 将VOC2012转换为tfrecord
  7. jquery+select+ajax实现时间可控的自动刷新
  8. 赞美老师!!!!!!
  9. ISAKMP报文解密
  10. 安装Centos6.9后配置网络