1. 程式人生 > >一文帶你實現遊戲中的音樂、音效設定

一文帶你實現遊戲中的音樂、音效設定

在遊戲開發過程中,背景音樂和音效的設定總是繞不過的,今天就來帶大家實現一個簡單的背景音樂和音效的設定邏輯。

 

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於」,立志做一個每天都有正反饋的人!

相關推薦

實現遊戲音樂音效設定

在遊戲開發過程中,背景音樂和音效的設定總是繞不過的,今天就來帶大家實現一個簡單的背景音樂和音效的設定邏輯。   1.首先將音樂資源和圖片資源都匯入到工程中(公眾號後臺回覆「AudioTest」可獲得完整工程,圖片和音樂資源來自關東昇老師《Cocos2d-x實戰》,侵刪。):  

理解JavaLock的實現原理

當多個執行緒需要訪問某個公共資源的時候,我們知道需要通過加鎖來保證資源的訪問不會出問題。java提供了兩種方式來加鎖,一種是關鍵字:synchronized,一種是concurrent包下的lock鎖。synchronized是java底層支援的,而concurrent包

實現RPC框架

想要獲取更多文章可以訪問我的部落格 - 程式碼無止境。 現在大部分的網際網路公司都會採用微服務架構,但具體實現微服務架構的方式有所不同,主流上分為兩種,一種是基於Http協議的遠端呼叫,另外一種是基於RPC方式的呼叫。兩種方式都有自己的代表框架,前者是著名的Spring Cloud,後者則是有阿里巴巴開源

【專案實踐】搞定頁面許可權按鈕許可權以及資料許可權

![許可權授權.png](https://img2020.cnblogs.com/blog/1496775/202101/1496775-20210108142933342-1432167452.jpg) > 以專案驅動學習,以實踐檢驗真知 # 前言 許可權這一概念可以說是隨處可見:等級不夠進入不了某個

遊戲音樂音效和語音玩家比較看重哪一個?

在一款遊戲中,音樂、音效、語音堪稱遊戲必不可少的三寶,那麼玩家到底看重哪一個呢?每個人都有自己的理解方式,在每個人心中都有自己認為最重要的那一部分。有人認為是遊戲音樂、音效,也會有人認為是語音,因為對於不同的玩家,側重點是不一樣的,每個人的關注點也不一樣,不同的玩家看重的東西不同。  

從夏農熵到手推KL散度:縱覽機器學習的資訊理論

資訊理論與資訊熵是 AI 或機器學習中非常重要的概念,我們經常需要使用它的關鍵思想來描述概率分佈

瞭解Spring核心介面Ordered的實現及應用

### 前言 最近在看框架的時候,發現了這個介面,在此進行總結,希望能夠給大家幫助,同時提升自己。 ### order介面的大體介紹 Spring框架中有這個一個介面,名字叫Ordered,聯想我們在資料庫中應用的Ordered,很容易想到它的含義就是用來排序。那麼問題來了,Spring中為什麼要定義這樣一個

學會國產加密演算法SM4的java實現方案

### 前言 今天給大家帶來一個國產SM4加密解密演算法的java後端解決方案,程式碼完整,可以直接使用,希望給大家帶來幫助,尤其是做政府系統的開發人員,可以直接應用到專案中進行加密解密。 畫重點!是SM4哦,不是SM。哈哈,各位要在知識裡遨遊,不要想歪。正文開始~ ![](https://img2020.c

學會基於SpringAop實現操作日誌的記錄

### 前言 大家好,這裡是經典雞翅,今天給大家帶來一篇基於SpringAop實現的操作日誌記錄的解決的方案。大家可能會說,切,操作日誌記錄這麼簡單的東西,老生常談了。不! ![](https://img2020.cnblogs.com/blog/1534147/202005/1534147-20200526

深度解析騰訊雲直播答題方案

exc com erp 同學 col 測試 的確 影響 cep 歡迎大家前往雲+社區,獲取更多騰訊海量技術實踐幹貨哦~ 作者:騰訊視頻雲 進入2018年最火的新鮮事物無疑就是“直播答題”了,動輒上百萬的獎金更是吸引了大量用戶的參與。一場直播動輒幾百萬的獎金,每人可以分到

了解激光雷達重要指標及參數

因此 一個 https 速度 .com p s 展示 jpg left 博客轉載自:https://www.leiphone.com/news/201801/oySuWNzftbNrWwpv.html 雷鋒網(公眾號:雷鋒網)按:本文作者SLAMTEC(思嵐科技公號slam

吃透執行緒池

微信公眾號:[Amos部落格] 內容目錄 TreadPoolexecutor原始碼解析 類關係圖 Executor介面 ExecutorService介面 AbstractExecutorService 成員變數

快速瞭解最火的數字經濟(大資料人工智慧等都有)

人工智慧行業應用加速(暴富機會由“網際網路+”轉向AI+) “網際網路+”紅利已開發將盡,未來,新的暴富紅利將由“人工智慧”接棒。從產業演進看,科技巨頭正加速全球化併購,打造AI生態閉環,開源化也將成為全球性趨勢。開源化使得人工智慧的行業運用門檻急遽降低,未來幾年將迎來人工智慧行業應用浪潮。 2

某高校計算機程式設計教授教如何快速入門python,進入程式設計

如何快速入門Python 學習任何一門語言都是從入門(1年左右),通過不間斷練習達到熟練水準(3到5年),少數人最終能精通語言,成為執牛耳者,他們是金字塔的最頂層。雖然萬事開頭難,但好的開始是成功的一半,今天這篇文章就來談談如何開始入門 Python。只要方向對了,就不怕路遠。 設定目標

學會使用YOLO及Opencv完成影象及視訊流目標檢測(上)|附原始碼

計算機視覺領域中,目標檢測一直是工業應用上比較熱門且成熟的應用領域,比如人臉識別、行人檢測等,國內的曠視科技、商湯科技等公司在該領域佔據行業領先地位。相對於影象分類任務而言,目標檢測會更加複雜一些,不僅需要知道這是哪一類影象,而且要知道影象中所包含的內容有什麼及其在影象中的位置,因此,其工業應用比較廣泛。那麼

學會使用YOLO及Opencv完成圖像及視頻流目標檢測(上)|附源碼

目錄 aliyun sele 分數 connected 出了 man 領域 turn 計算機視覺領域中,目標檢測一直是工業應用上比較熱門且成熟的應用領域,比如人臉識別、行人檢測等,國內的曠視科技、商湯科技等公司在該領域占據行業領先地位。相對於圖像分類任務而言,目標檢測會更加

瞭解求職面試那些名詞(乾貨)

喬兄剛剛經歷了19秋招,收穫了百度offer,馬上要迎來了19春招,有很多公眾號的粉絲經常會問今年不是2018年嗎,你咋就已經完成了2018校招了?由於被很多人經常問起,下面喬兄給大家普及一下跟校招相關的名詞。 現在時間是北京時間 2018.11.15,請務必根據現在的時間去推測你的情況。 201

還沒寫過爬蟲的小白點進來,入門python爬蟲(小白福利)

入門 準備工作 需要準備的東西: Python、scrapy、一個IDE或者隨便什麼文字編輯工具。 隨便建一個工作目錄,然後用命令列建立一個工程,工程名為miao,可以替換為你喜歡的名字。 scrapy startproject miao 隨後你會得到如下的一個由scrapy建立

瞭解 Raft 一致性協議的關鍵點

此文已由作者孫建良授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 Raft 協議的釋出,對分散式行業是一大福音,雖然在核心協議上基本都是師繼 Paxos 祖師爺(lamport) 的精髓,基於多數派的協議。但是 Raft 一致性協議的貢獻在於,定義了可易於實現的一致性協議

看懂卷積神經網路(CNN)讓意想不到的10創新idea

    全文摘要 卷積神經網路(CNN)可以說是深度學習發展的一個縮影,特別是現在在計算機視覺方面已經得到了非常成熟的應用,在目標檢測、目標追蹤等方面也是獨領風騷,本文將講述卷積神經網路近些年來的發展歷程,以及它到底創新在什麼地方。本文略長,看完大約3