有没有音效cc.audioengine的详细教程啊。。

比如按钮点击放音效,如果玩家一直点,我也一直放音效
但是我看音效的id会一直++
那么我之前播放的音效是会驻留在内存里吗?
这个按钮事件回调我是这样写的。。。总觉得不应该这么简单的:sweat_smile:
论坛里相关的例子太少了,求教各位了~
告诉我最好的写法是怎样的?

btnPlay() {
    this.btn=cc.audioEngine.playEffect(this.audios[2], false);
    cc.audioEngine.setVolume(this.btn,this.effVolume);
},

第一行加个cc.audioEngine.stop(this.btn);试试?

再btnPaly()外面调用playEffect,会返回一个id给你,在btnPaly()通过id播放

this.btn=cc.audioEngine.playEffect(this.audios[2], false);
btnPlay() {
cc.audioEngine.setVolume(this.btn,this.effVolume);
},

stop的话那就不能多个同类音效叠加出现了吧?

就是说我先在onload里把所有常用的音效都用音量=0的方式play一遍,然后以后用到的时候再次play?
那多个相同音效叠加,我是不是要自己写个对象池一样的东西啊

我也对cc.audioEngine有点疑惑,看到里面有uncache方法,是否需要自己管理音频的内存释放?
如果不管理,同一个cc.audioClip播放多次,是否会造成内存遗漏?

我刚才尝试了一下用stopEffect:

btnPlay() {
    if(!this.btn){
        this.btn=cc.audioEngine.playEffect(this.audios[2], false);
    }else {
        cc.audioEngine.stopEffect(this.btn);
        this.btn=cc.audioEngine.playEffect(this.audios[2], false);
    }
},

发现这样不行啊,log打出来id一直在增加的
看了api里也没有像这样this.btn.play()的方法

试了cc.audioEngine.setCurrentTime(this.btn, 0);
这样在快速点击时可以,但是当这个音频播放完后,再点就不行了

看样子只能弄个新的出来。。。。this.btn=cc.audioEngine.playEffect(this.audios[2], false);
就只能uncache掉?
我又试了先uncache,但是id还是一直增加

btnPlay() {
    if(!this.btn){
        this.btn=cc.audioEngine.playEffect(this.audios[2], false);
    }else {
        cc.audioEngine.uncache(this.btn);
        this.btn=cc.audioEngine.playEffect(this.audios[2], false);
    }
},

好想有人能详细的介绍一下,或者给一个范例demo

mark,已排上日程,关注我的公众号或者博客,或者加Q群704391772

1赞

大佬,给你点赞~等你的帖子啊~~~~或者能不能提前发点范例代码给我:confounded:

还是要系统写一篇教程

大佬,写完了吗?

你可以看下CCAudioEngine.js,id是自增的,里面有对象池管理,如果你需要连续点击时不重复播放就按照你用stopEffect那样写就可以,id是每次调用play都会自增

我也是对这个 cc.audioEngine有点疑惑?音频播放完是否需要我们手动去释放?还是cc本身就有对象池来管理这些播放过的音频?