一文带你实现游戏中的音乐、音效设置

安稳与你 提交于 2019-11-27 08:29:26

在游戏开发过程中,背景音乐和音效的设置总是绕不过的,今天就来带大家实现一个简单的背景音乐和音效的设置逻辑。

 

1.首先将音乐资源和图片资源都导入到工程中(公众号后台回复「AudioTest」可获得完整工程,图片和音乐资源来自关东升老师《Cocos2d-x实战》,侵删。):

 

2.创建 MainScene,添加三个 Button 组件并摆放到合适位置:

 

3.创建 SettingScene,添加两个 Toggle 组件和一个 Button 组件并摆放到合适位置(背景音乐和音效开关为 Toggle 组件,返回按钮为 Button 组件):

 

4.场景创建完后就可以编辑脚本了,MainScene.js 和 SettingScene.js 脚本分别如下:

 1 // MainScene.js   2 ​   3 cc.Class({   4     extends: cc.Component,   5 ​   6     properties: {   7         music: {   8             default: null,   9             type: cc.AudioClip  10         },  11 ​  12         sound: {  13             default: null,  14             type: cc.AudioClip  15         }  16     },  17 ​  18     // LIFE-CYCLE CALLBACKS:  19 ​  20     onLoad() {  21         this.initAudioState();  22         this.playMusic();  23 ​  24         // 设置按钮回调函数  25         this.node.getChildByName("bt_startGame").on(cc.Node.EventType.TOUCH_START, this.cb_startGame, this);  26         this.node.getChildByName("bt_setting").on(cc.Node.EventType.TOUCH_START, this.cb_setting, this);  27         this.node.getChildByName("bt_help").on(cc.Node.EventType.TOUCH_START, this.cb_help, this);  28     },  29 ​  30     start() {  31 ​  32     },  33 ​  34     // update (dt) {},  35 ​  36     // 开始游戏 CallBack  37     cb_startGame(button) {  38         this.playSound();  39         console.log("startGame");  40     },  41 ​  42     // 帮助 CallBack  43     cb_help() {  44         this.playSound();  45         console.log("help");  46     },  47 ​  48     // 设置 CallBack  49     cb_setting() {  50         this.playSound();  51         cc.director.loadScene("SettingScene");  52     },  53 ​  54     // 初始化音乐、音效状态  55     initAudioState(){  56         if (!(cc.sys.localStorage.getItem("IS_SOUND"))) {  57             cc.sys.localStorage.setItem("IS_SOUND", false);  58         }  59 ​  60         if (!(cc.sys.localStorage.getItem("IS_MUSIC"))) {  61             cc.sys.localStorage.setItem("IS_MUSIC", false);  62         }  63     },  64 ​  65     // 播放音效  66     playSound() {  67         if (cc.sys.localStorage.getItem("IS_SOUND") == "true") {  68             var sound = cc.audioEngine.playEffect(this.sound, false);  69         }  70     },  71 ​  72     // 播放音乐  73     playMusic() {  74         if (cc.sys.localStorage.getItem("IS_MUSIC") == "true") {  75             var music = cc.audioEngine.playMusic(this.music, false);  76         }  77     },  78 });

 

  1 // SettingScene.js    2 ​    3 cc.Class({    4     extends: cc.Component,    5 ​    6     properties: {    7         isPlayMusic: true,    // 是否播放音乐    8         isPlaySound: true,    // 是否播放音效    9 ​   10         music: {   11             default: null,   12             type: cc.AudioClip   13         },   14 ​   15         sound: {   16             default: null,   17             type: cc.AudioClip   18         }   19     },   20 ​   21     // LIFE-CYCLE CALLBACKS:   22 ​   23     onLoad() {   24         var soundNode = this.node.getChildByName("toggle_sound");   25         var musicNode = this.node.getChildByName("toggle_music");   26         var OKNode = this.node.getChildByName("bt_OK");   27 ​   28         // 设置音乐、音效状态   29         this.isPlaySound = cc.sys.localStorage.getItem("IS_SOUND");   30         this.isPlayMusic = cc.sys.localStorage.getItem("IS_MUSIC");   31 ​   32         soundNode.getComponent(cc.Toggle).isChecked = this.stringToBoolean(this.isPlaySound);   33         musicNode.getComponent(cc.Toggle).isChecked = this.stringToBoolean(this.isPlayMusic);   34 ​   35         // 设置按钮回调函数   36         soundNode.on('toggle', this.cb_sound, this);   37         musicNode.on('toggle', this.cb_music, this);   38         OKNode.on(cc.Node.EventType.TOUCH_START, this.cb_ok, this);   39     },   40 ​   41     start() {   42 ​   43     },   44 ​   45     // 音效 callback   46     cb_sound(toggle) {   47         console.log("cb_sound");   48 ​   49         this.playSound();   50 ​   51         if (toggle.isChecked) {   52             cc.sys.localStorage.setItem("IS_SOUND", true);   53 ​   54         } else {   55             cc.sys.localStorage.setItem("IS_SOUND", false);   56         }   57     },   58 ​   59     // 音乐 callback   60     cb_music(toggle) {   61         console.log("cb_music");   62 ​   63         this.playSound();   64 ​   65         if (toggle.isChecked) {   66             cc.sys.localStorage.setItem("IS_MUSIC", true);   67             var music = cc.audioEngine.playMusic(this.music, false);   68 ​   69         } else {   70             cc.sys.localStorage.setItem("IS_MUSIC", false);   71             cc.audioEngine.stopMusic();   72         }   73     },   74 ​   75 ​   76     // 返回 callback   77     cb_ok() {   78         this.playSound();   79 ​   80         cc.director.loadScene("MainScene");   81     },   82 ​   83     // 播放音效   84     playSound() {   85         if (cc.sys.localStorage.getItem("IS_SOUND") == "true") {   86             var sound = cc.audioEngine.playEffect(this.sound, false);   87         }   88     },   89 ​   90     // 播放音乐   91     playMusic() {   92         if (cc.sys.localStorage.getItem("IS_MUSIC") == "true") {   93             var music = cc.audioEngine.playMusic(this.music, false);   94         }   95     },   96 ​   97     // 将字符长转化为 bool 型   98     stringToBoolean(str) {   99         switch (str.toLowerCase()) {  100             case "true": case "yes": case "1": return true;  101             case "false": case "no": case "0": case null: return false;  102             default: return Boolean(str);  103         }  104     }  105 ​  106     // update (dt) {},  107 });

 

5.编辑好脚本后,分别将对应脚本挂载到对应场景的 Canvas 节点上,并将对应的音乐资源拖到对应位置:

 

 

6.资源挂载好后就可以进行预览了,可以发现通过设置已经可以控制背景音乐和音效的开关了,感兴趣的小伙伴赶快公众号后台回复「AudioTest」获取资源试试吧!

 


 

我是「Super于」,立志做一个每天都有正反馈的人!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!