大侠
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

58 lines
1.5 KiB

import { AudioClip, AudioSource, Node, Component, _decorator } from "cc";
import SoundNodePool from "./SoundNodePool";
import { EGlobalEvent } from "../MesEvent/EGlobalEvent";
import MesMgr from "../MesEvent/MesMgr";
/**音频组件代理 */
const {ccclass, property,menu} = _decorator;
@ccclass("AudioEx")
@menu("扩展/音频扩展")
export default class AudioEx extends AudioSource {
isRemove:boolean = false;
init(isRemove: boolean, Parent: Node) {
this.isRemove = isRemove;
this.node.setParent(Parent);
if (this.isRemove) {
this.loop = false;
MesMgr.on(EGlobalEvent.停止所有音效, this.stop, this);
} else {
this.loop = true;
}
}
setVolume(volume:number){
this.volume = volume;
}
playOne(audio: AudioClip, callback?: Function) {
this.clip = audio;
if(this.currentTime!=0){this.currentTime = 0;}
this.play();
this.isRemove && this.scheduleOnce(() => {
this.stop();
callback && callback();
}, audio.getDuration());
}
playloop(audio: AudioClip) {
this.stop();
this.clip = audio;
this.play();
}
stop(){
if (!this.clip) { return; }
this.isRemove && this.unscheduleAllCallbacks();
super.stop();
this.clip = null;
this.isRemove && SoundNodePool.pushPoxy(this);
}
isPlaying(){
return !!this.clip;
}
onDestroy(): void {
MesMgr.offAllCaller(this);
}
}