一文帶你實現遊戲中的音樂、音效設定
在遊戲開發過程中,背景音樂和音效的設定總是繞不過的,今天就來帶大家實現一個簡單的背景音樂和音效的設定邏輯。
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實戰》,侵刪。):
一文帶你理解Java中Lock的實現原理
當多個執行緒需要訪問某個公共資源的時候,我們知道需要通過加鎖來保證資源的訪問不會出問題。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