2017年11月17日

cocos creator-基础教程-音频媒体加载与播放的三种方式(三)

作者 admin

大家好又到了周五,停更了一周,今天接着更新,

对于重要的事情都说三遍,哈哈,闲话不多说……

对于加载而言,在未开始游戏前就把所有资源全部加载这样是不可取的,如果我的游戏30m+,还没进游戏加载就1到2分钟,试问谁还能等下去??对于用户等待有个“黄金15秒”的说法,超过一定的值很多人就不会在等待,而且反复的关闭,再次打开,还有甚者直接关闭。

俗话说得好,条条大路通罗马,办法很多今天主要列出一种,

官方api关于load加载的地址:http://www.cocos.com/docs/creator/api/classes/loader.html#property_loader

 

cc.loader.load(); 这个函数
咱们现在看看官方是如何说的:

load加载

  • resources
  • [progressCallback ]
  • [completeCallback ]

使用进程回调和完整的回调加载资源。进度回调与Pipeline的onProgress相同 完整的回调与Pipeline的onComplete几乎相同 唯一的区别是当用户传递一个url作为资源时,完整的回调将直接设置其结果作为第二个参数。

名称 类型 描述
resources
String | String[] |Object
网址列表中的数组
progressCallback可选的 Function 当进程更改时调用回调

  • 已完成的 计数

    已完成的项目数量

  • totalCount 编号

    项目的总数

  • 项目 对象

    流出管道的最新项目

completeCallback可选的 Function 所有资源加载时调用回调

好吧这个确实不够清楚,千里之行始于足下,看代码了,

cc.loader.load(cc.url.raw(‘resources/audio/jump.mp3’), function(){
console.log(“已获取”);
});
通过控制台打印,确实可行,但是这么写是很低效的,不值得提倡的,对于程序来说无论是代码的健壮,还是可移植程度,编码风格都是不可取的,这里面尽可能的写成一组对象,通过for循环来进行遍历我们的图片,遍历同时还要有判断,图片是否正常获取,如果获取不到又如何处理……从对象池里面来获取,这样代码即便看起来舒服是一方面,可移植性,制成个人插件也是好的,前提是本身他就值得扩展开发…..话有点扯远了。
接下来说播放,
官方入口文档:http://www.cocos.com/docs/creator/audio/audio.html
官方入口api:http://www.cocos.com/docs/creator/api/classes/AudioSource.html

好吧确实不爱看,直接说差别吧,众所周知关于“h5音频播放”一直是很多人侃侃而谈的资本,确实他这个扭曲的“标准”,让游戏处理变得束手束脚,就拿一个平常的例子来看,安卓跟ios还有html5播放,三个标准,没错是三个不一样的标准,如何使每个平台兼容我们的音频,这也是cocos 团队一直在做的事儿,首先我们先说第一种方法。

AudioSource

 个人对他并不是很感冒,这大概是一个假的音频,在ios平台结合全局变量运行会出现声音延迟,卡顿,噪声……这确实是个问题,据说他走的是html5标准播放方式,我们看下一个方法

AudioEngine

这个还是不错的在我测试时候发现在ios跟webmobile上运行还是很不错的,兼容处理也要好于上面的audioSource,

值得注意的是:AudioEngine播放的时候,需要注意这里的传入的是一个完整的url(与res路径稍有不同)。所以我们不建议在播放的接口内直接填写音频的url地址,而是希望大家先定义一个AudioClip,然后在编辑器内将音频拖拽过来。

除了这种方法,我们还可以通过第三种方法

let nextMus = “resources/audio/need.mp3”;
let soundNextMus=cc.url.raw(nextMus);
cc.audioEngine.play(soundNextMus, false, 1);
也是可以的,最后一点,在编译器里面当你放置媒体时候 右侧会有两个选项,