cocos creator3.32 实测3.3.2中playOneShot这个方法性能低下

本人小游戏 基于3.0开发其中有用到 AudioSource.playOneShot方法来播放拾取音效,想升级到creator3.3.2版本,结果实际运行时发现1秒内拾取15件装备,也就是播放15次音效,3.0上没卡顿的感觉很流畅,而在3.3.2上有很明显的卡顿,经过排查发现就是 AudioSource.playOneShot引起的,虽然可以用play代替来保证运行流畅,但是会丢失拾取多下的声音反馈,也不太想通过逻辑限定播放间隔的方式实现,单纯的想问问2个版本该方法有什么不同吗?为什么一个卡,一个不卡呢?

  • Creator 版本:3.3.2

  • 目标平台: pc和手机浏览器,小游戏

因为音效反馈其实也挺重要的,效果不好的话十分影响体验,除了拾取音效,游戏运行过程中往往还有大量音效的交集,怪物被击打 掉落 子弹发射 等等,无法避免的会出现音效集中播放的情况,解决不了这个卡顿的话 感觉问题还是挺大的

感谢反馈,我看看这个问题

001.zip (176.0 KB)
你好,请你看看我的测试例子,使用这个例子在 iphone 手机的微信小游戏上没感觉到卡顿。请你也使用它测试一下你的设备。如果只有你的工程才会出现问题,那么请你上传 demo 让我们帮你处理。

好的 我测试一下

大佬好 将代码里的播放改为这样就掉帧了
onButtonClicked () {
var a = 20;

    for (let index = 0; index <a; index++) {
        this.myAudioSource.playOneShot(this.myAudioSource.clip, 1.0);
    }

    // this.schedule(()=>{
    //     this.myAudioSource.playOneShot(this.myAudioSource.clip, 1.0);
    // }, 0.25, this.playTimes - 1, 0.25)
}

1赞

我吧 单次事件 循环次数改为5次,然后反复的点击,没有出现,改为20次就出现了,感觉像是超过一定频率以后,清理相关引用没有成功,越点掉帧越厉害了

不对 改为5次也会出现, 只要多点几下按钮(100下),就开始掉帧了

目前的设计确实每次调用 playOneShot 时都会走下面这段代码,进行资源下载请求和音频资源解析:


用 console.time 打印了下执行时间,在 cpu 性能越低的情况下卡顿情况越明显。

还是先用 play 吧,它不会调用这些东西。

play是可以,不过感觉丢了很多交互反馈,目前已经暂停版本升级了,3.0 版本没发现这个问题,等到最新版本优化OK了咱们再上 :grinning:

多谢大佬解答!