前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >社区开源框架音效管理模块:AudioManager详解

社区开源框架音效管理模块:AudioManager详解

作者头像
李海彬
发布2020-09-03 15:02:12
9260
发布2020-09-03 15:02:12
举报
文章被收录于专栏:Golang语言社区

地址:https://github.com/Golangltd/LollipopCreator

版本刚刚开源,后续会持续更新!

框架文档地址:GameAIs.Com

LollipopCreator:AudioManager

LollipopCreator游戏框架

游戏客户端开发中,由于制作人或者策划立项的不同,导致前端开发并不像后端框架不变,例如 2D游戏开发,引擎选择就比较多,Unity、cocos、 白鹭等都可以,本系列就是给大家开源一套cocos creator引擎开发的2D游戏框架LollipopGo。 creator 系统为例,给大家梳理下前端2D游戏架构的基础设计思想。

Index

返回首页

  • 如何设计
  • 调用流程
  • 实例代码

如何设计

代码语言:javascript
复制
1. 工程中的音效管理,涉及到按钮音效、背景音效、特效音效等
2. 包括预加载和资源释放调用等

调用流程

代码语言:javascript
复制
例子:
    playSound(file, moduleName) {
        if (file && this.soundVolume > 0) {
            moduleName = moduleName || 'master'

            let modPath = (moduleName == 'master') ? 'Master/data/sound' : `SubModules/${moduleName}/data/sound`
            let url = cc.url.raw(`resources/${modPath}/${file}.mp3`)
            cc.log(url)
            return cc.audioEngine.play(url, false, this.soundVolume)
        }

        return -1
    }
注意点:主资源位置Master/data/sound
       子游戏资源位置SubModules/${moduleName}/data/sound

实例代码

代码语言:javascript
复制
class AudioManager {
    constructor() {
        this.model = {
            musicID: -1,
            musicFile: null
        }
    }

    get soundVolume() {
        return globalCfg.setting.soundVolume
    }

    set soundVolume(percent) {
        globalCfg.setting.soundVolume = Math.max(0, Math.min(1, percent))
    }

    get musicVolume() {
        return globalCfg.setting.musicVolume
    }

    set musicVolume(percent) {
        globalCfg.setting.musicVolume = Math.max(0, Math.min(1, percent))

        if (this.model.musicID >= 0) {
            cc.audioEngine.setVolume(this.model.musicID, globalCfg.setting.musicVolume)
        }
    }

    get soundEnable() {
        return this.soundVolume > 0
    }

    get musicEnable() {
        return this.musicVolume > 0
    }

    set soundEnable(val) {
        this.soundVolume = val ? 0.5 : 0
    }

    set musicEnable(val) {
        this.musicVolume = val ? 0.5 : 0
    }

    save() {
        ut.storageSave('audio_setting', {
            sound: globalCfg.setting.soundVolume,
            music: globalCfg.setting.musicVolume,
        })
    }

    load() {
        let setting = ut.storageLoad('audio_setting', { sound: 0.5, music: 0.5 })
        this.soundVolume = setting.sound
        this.musicVolume = setting.music
    }

    playSound(file, moduleName) {
        if (file && this.soundVolume > 0) {
            moduleName = moduleName || 'master'

            let modPath = (moduleName == 'master') ? 'Master/data/sound' : `SubModules/${moduleName}/data/sound`
            let url = cc.url.raw(`resources/${modPath}/${file}.mp3`)
            cc.log(url)
            return cc.audioEngine.play(url, false, this.soundVolume)
        }

        return -1
    }

    playMusic(file, moduleName) {
        moduleName = moduleName || 'master'
        let modPath = (moduleName == 'master') ? 'Master/data/sound' : `SubModules/${moduleName}/data/sound`
        let url = cc.url.raw(`resources/${modPath}/${file}.mp3`)

        if (this.model.musicFile == url) {
            return
        }

        this.stopMusic()

        cc.log(url)
        cc.log('musicVolumn', this.musicVolume)
        this.model.musicID = cc.audioEngine.play(url, true, this.musicVolume)

        if (this.model.musicID >= 0) {
            this.model.musicFile = url
        } else {
            this.model.musicFile = null
            this.model.musicID = -1
        }
    }

    stopSound(audioID) {
        if (audioID >= 0) {
            cc.audioEngine.stop(audioID)
        }
    }

    stopMusic() {
        if (this.model.musicID >= 0) {
            cc.audioEngine.stop(this.model.musicID)
            this.model.musicFile = null
            this.model.musicID = -1
        }
    }
}

window.audioMgr = new AudioManager()

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • LollipopCreator:AudioManager
    • Index
      • 返回首页
        • 如何设计
          • 调用流程
            • 实例代码
            相关产品与服务
            对象存储
            对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档