CocosCreator+TS音效管理类

你可能感兴趣:

cocosceator+TS资源管理类

Cocos Creator+TS改造日志系统

Cocos Creator+TS自己写一个消息机制

在游戏中,背景音乐与音效是一个不可忽视的元素,写一个音效管理类可以帮助我们有效的进行背景音乐和音效的替换、调整声音大小、统一暂停等操作。

同样,在这里将这个音效管理类设为单例模式:

    //单例唯一实例
    private static _instance:AudioManager = null;
    public static get instance():AudioManager{
        if(!this._instance){
            this._instance = new AudioManager();
        }
        return this._instance;
    }

背景音乐的处理:

其中的EnumManager.instance.AudioPath是一个枚举类型,我将音乐和音效的路径放到其中,方便使用。

    //默认bgm
    private bgm:string = "";

    /**
     * 播放或者切换背景音乐
     * @param bgm 背景音乐的路径名称,使用EnumManager.instance.AudioPath
     * @returns 
     */
    public playBGM(bgm:string){
        if(bgm === "" || this.bgm === bgm || !Manager.DataManager.bIsOpenMusic){
            return;
        }
        this.bgm = bgm;
        cc.audioEngine.stopMusic();
        let path = bgm;
        Manager.ResManager.loadResource(path,cc.AudioClip,(err,res:cc.AudioClip)=>{
            if(err){
                Logger.err(err);
                return;
            }
            cc.audioEngine.playMusic(res,true);
        });
    }

    /**
     * 背景音乐是否正在播放
     * @returns 返回true/false
     */
    public isPlayingBGM():boolean{
        return cc.audioEngine.isMusicPlaying();
    }

    /**
     * 恢复背景音乐
     */
    public resumeBGM(){
        cc.audioEngine.stopMusic();
        if(this.bgm === ""){
            this.bgm = EnumManager.instance.AudioPath.bgm;
        }
        let path = this.bgm;
        Manager.ResManager.loadResource(path,cc.AudioClip,(err,res:cc.AudioClip)=>{
            if(err){
                Logger.err(err);
                return;
            }
            cc.audioEngine.playMusic(res,true);
        });
    }

    //停止播放背景音乐
    public stopMusic(){
        cc.audioEngine.stopMusic();
    }

音效处理:

    /**
     * 播放音效
     * @param soundName 音效路径名称,使用EnumManager.instance.AudioPath
     * @param loop 是否循环播放
     * @param vulome 音效声音大小
     */
    public playSound(soundName:string,loop?:boolean,vulome?:number){
        if(soundName ==="" || !Manager.DataManager.bIsOpenSound){
            return;
        }
        let path = soundName;
        Manager.ResManager.loadResource(path,cc.AudioClip,(err,res:cc.AudioClip)=>{
            if(err){
                Logger.err(err);
                return;
            }
            cc.audioEngine.playEffect(res,loop?loop:false);
            cc.audioEngine.setEffectsVolume(vulome);
        });
    }

    /**
     * 停止播放所有音效
     */
    public stopSound(){
        cc.audioEngine.stopAllEffects();
    }

    /**
     * 恢复播放所有音效
     */
    public resumeSound(){
        cc.audioEngine.resumeAllEffects();
    }

音乐和音效的共同控制:

    /**
     * 停止播放背景音乐和音效
     */
    public stopAllMusicAndSound(){
        cc.audioEngine.stopAll();
    }

    /**
     * 恢复播放背景音乐和音效
     */
    public resumeAllMusicAndSound(){
        cc.audioEngine.resumeAll();
    }

    /**
     * 设置背景音乐的音量大小(0-1)
     */
    public setMusicVolume(volume:number){
        cc.audioEngine.setMusicVolume(volume);
    }

    /**
     * 设置音效的音量大小(0-1)
     */
    public setSoundVolume(volume:number){
        cc.audioEngine.setEffectsVolume(volume);
    }

防止按钮连续点击处理:

    /**
     * 音效按钮有效点击时间
     */
    private clickTime:number = 0;
    public isCanClick():boolean{
        let time = new Date().getTime();
        if((time - this.clickTime) < 300){
            return;
        }
        else{
            this.clickTime = time;
        }
        this.playSound(EnumManager.instance.AudioPath.buttonSound);
    }

在最后放了一个通用的防止按钮或者点击的图片多次触发的处理。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡西莫多说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值