所有游戲都離不開音樂,但如何管理音樂是個問題。本菜鳥教程主要講解如何通過自己寫的音頻管理課,讓自己的小游戲項目更加鮮明,管理起來更加方便。音頻管理類需要用白鷺的Sund類。建議先去官網(wǎng)查查相關(guān)API和例子。
http://developer.egret.com/cn/apidoc/index/name/egret.Sound
讓我們試著寫一個音頻管理演示。
首先,創(chuàng)建一個音頻設(shè)置面板用戶界面
通過白鷺的eui組件設(shè)置面板。
音樂音效的切換由eui的ToggleSwitch控制,音量由HSlider控制。
同時生成關(guān)聯(lián)的TS類:
classSetUpextendseui。組件實現(xiàn)ui組件{
publicvolume: eui。HSlider//volume publicMusic: eui。ToggleSwitch//Music publicEffect: eui。ToggleSwitch//sound publicconstructor() {
super();
}
protectedpatadded(PartName:string,instance: any): void{
super.partAdded(partName,instance);
}
protected children created():void {
super . children created();}
}
其次,創(chuàng)建SoundManager(音頻管理類)
將聲音管理器編寫為單獨的類:
classSoundManager{
private static _ manager:SoundManager;
publicationstaticgetinstance(){
if(!SoundManager。_經(jīng)理){
SoundManager。_ manager = newSoundManager();
}
returnSoundManager。_經(jīng)理;
}
}
聲明幾個私有屬性來管理音樂音效:
privatebgMusic:白鷺。聲音;//背景音樂private bgmusic _ channel:egret . sound channel;
private isbgmusiccomplete:boolean = false;//背景音樂是否已加載私點擊:白鷺。聲音;//單擊privateisclickcomplete時的聲音:boolean = false
private _ ISmusic:boolean = true;//背景音樂是否播放private _ ise effect:boolean = true;//音效是否播放private _ volumem:number = 1;//volume privates:number = 1;//控制背景音樂不重復添加
在構(gòu)造函數(shù)中加載音頻資源:
publicconstructor() {
this.bgMusic=newegret。sound();
This.bgMusic.load("資源/音頻文件路徑. MP3 ");
this.bgMusic.addEventListener(白鷺。Event.COMPLETE,()= >;{
//成功執(zhí)行音頻加載的方法
this.isbgMusicComplete = true
},這個);
this.click=newegret。sound();
this . click . load(" resource/audio file path . MP3 ");
this . click . AddEventListener(egret。Event.COMPLETE,()= >;{
this.isClickComplete = true
},這個);
}
分別寫出控制音樂播放、停止和音量控制的方法:
//播放背景音樂publicatplaygmusic(){
if(this . ISgmusIComplete & amp;& ampthis.isMusic & amp& ampthis.cs) {
this . bgmusic _ channel = this . bgmusic . play(0,0);
this . cs = 0;
}
}
//停止背景音樂publistopbgmusic(){
if(this.bgMusic_channel) {
this . bgmusic _ channel . stop();
this.bgMusic _ channel = null
this . cs = 1;
}
}
//播放音效publiplayclickeffect(){
//this . iseeffect調(diào)用getter方法
if(this . Isclick complete & amp;& ampthis . iseeffect){
this.click.play(0,1);
}
}
publicgetisMusic() {
//通過本地存儲實現(xiàn)沒有第二局時保存最后一盤音頻的方案
let ret = egret . local storage . GetItem(" Ismusic ");
if(ret=="true"||!ret) {
這個。_ isMusic = true
} else{
這個。_ isMusic = false
}
返回此。_ isMusic
}
publicatesetismusic(b:boolean){
這個。_ Ismusic = b;
egret . LocalStorage . SetItem(" Ismusic ",b . ToString());
if(b) {
//播放聲音
this . PlayGmusic();
} else{
//關(guān)閉聲音
this . stop bgmusic();
}
}
//設(shè)置_ isEffect屬性publicssetiseffect的值(b: boolean) {
這個。_ iSeeffect = b;
egret . LocalStorage . SetItem(" iSeeffect ",b . ToString());
}
//獲取_ isEffect屬性publicgetisEffect()的值
let ret = egret . local storage . GetItem(" iSeeffect ");
if(ret=="true"||ret==null) {
這個。_ iSeeffect = true;
} else{
這個。_ iSeeffect = false;
}
返回此。_ iSeeffect;
}
//設(shè)置音量publicsetvolume(v:number){
這個。_ volume = v;
egret . LocalStorage . SetItem(" volume ",v . ToString());
this . setvolume(v);
}
publicgetvolume(){
let ret = egret . local storage . GetItem(" volume ");
if(ret==null){
這個。_ volume = 1;
}else{
這個。_ volume = Number(ret);
}
返回此。_ voluem
}
第三,編寫安裝類(安裝面板)
classSetUpextendseui。組件實現(xiàn)ui組件{
publicvolume: eui。HSlider//volume publicMusic: eui。ToggleSwitch//Music publicEffect: eui。ToggleSwitch//sound publicconstructor() {
super();
}
protectedpatadded(PartName:string,instance: any): void{
super.partAdded(partName,instance);
}
protected children created():void {
super . children created();
this . init();
}
privateinit(){
this . volume . value = 10;
這個。Music.addEventListener(白鷺。Event.CHANGE,this.onchangeBGM,this);
這個。Effect.addEventListener(egret。Event.CHANGE,this.onchangeET,this);
this . volume . addevent listener(egret。Event.CHANGE,this.onchangeVolume,this);
}
//單擊背景音樂開關(guān)privateonchangeBGM(){
SoundManager。Instance.isMusic=this。Music.selected//設(shè)置背景音樂sound manager . instance . playclickeffect();//播放音效}
//單擊音效開關(guān)privateonchange () {
SoundManager。Instance.isEffect = this。效果. selected;//設(shè)置音效sound manager . instance . playclick effect()是否可以播放;//播放音效}
//控制卷privateonchangeVolume(){
SoundManager。instance . volume = this . volume . value/10;
// SoundManager。instance . playclickeffect();//播放音效}
}
四.在main中添加相應(yīng)的點擊和顯示設(shè)置面板的方法
protected CreateGamesence():void {
letbg:白鷺。bitmap = this . createbitmapbyname(" BG _ jpg ");
this . AddChild(BG);
let set:SEtuP = NewSetup();//設(shè)置面板
letszw:白鷺。TextField=newegret。TextField();
Szw.text= "設(shè)置";
szw.x = 500
szw.y = 200
this . AddChild(szw);
szw.touchEnabled = true
szw.addEventListener(白鷺。TouchEvent.TOUCH_TAP,()= >;{
!set.parent & amp& ampthis . AddChild(set);//如果設(shè)置面板的父類不存在,則添加到舞臺
SoundManager。instance . playclickeffect();//播放音效
},這個);
bg.touchEnabled = true
bg.addEventListener(白鷺。TouchEvent.TOUCH_TAP,()= >;{
set.parent & amp& ampthis . remove child(set);//如果設(shè)置面板的父類存在,則刪除
SoundManager。instance . playclickeffect();//播放音效
},這個);
}
最后,附上本教程的源代碼:https://github.com/hkjlx/SoundDemo
聯(lián)系我們
1.《音頻管理器 菜鳥丨小游戲音頻管理教程》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《音頻管理器 菜鳥丨小游戲音頻管理教程》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/guonei/1049104.html