第40節 - LibGDX: Audio(Sound & Music)
這一節我會介紹LibGDX遊戲的Audio System (Background Music & Sound Effect),我在第39節 - LibGDX: Tiled (Bullet Class)介紹過如何加入發射子彈的方法,這一節會加入背景音樂和發射子彈的音效。
UML - Class Diagram
以下是主程式(MyDemo40.java)加入Bullet.java、BackgroundSound.java和GunSound.java的Class Diagram:
- MyDemo40是Class,Bullet、BackgroundSound和GunSound是Class(傳入MyDemo40內用),所以它們的關係是Association。
執行結果:
以下是 LibGDX: Audio(Sound & Music)程式執行的結果:
背景音樂(Background Music)
BackgroundSound.java
以下是BackgroundSound.java輸出的背景音樂:
以下是BackgroundSound.java的程式碼:
- 首先在BackgroundSound類別的Constructor內,把bgsound1.mp3傳入Sound物件(sound)內。
- 建立一個playSound()方法,用sound.loop()方法重複播放背景音樂,音量是0至1,0.5f代表設定音量為一半。
發射子彈音效(Gun Sound Effect)
GunSound.java
以下是GunSound.java輸出的子彈音效:
以下是GunSound.java的程式碼:
- 首先在GunSound類別的Constructor內,把gun1.mp3傳入Sound物件(sound)內。
- 建立一個playSound()方法,用sound.play()方法播放發射子彈音效,音量是0至1,0.5f代表設定音量為一半。
注意,發射子彈音效不須要重複播放,所以我們不用sound.loop()方法。
2) MyDemo40.java新加入部分
以下部分會列出在MyDemo40.java程式新加的部分,如下圖:
- 建立bgSound1和gunSound1變數(Variable)。
- 在create()方法內建立BackgroundSound()物件(bgSound1),並重複播放背景音樂。
再建立GunSound()物件(gunSound1),但不須要播放發射子彈的音效。 - 別忘記呼叫dispose()方法,執行bgSound1.sound.dispose();和gunSound1.sound.dispose(); 釋放資源。
- 在keyDown()執行gunSound1.playSound()方法播放發射子彈的音效。
LibGDX程式
例子1 - LibGDX: (Audio: Sound & Music)
這個例子會用LibGDX示範Sound & Music Class:
DesktopLauncher.java
- DesktopLauncher是PC Desktop的Starter Class,我們在DesktopLauncher內設定顯示的大小為1024 X 768 px。
- 把bgsound1.mp3和gun1.mp3儲存到Android的Assets文件夾內(/sound/...)。
Bullet.java
- 首先在Bullet類別的Constructor內,把bulletPosition和bulletVelocityX傳入。
bulletPosition就是主角hero1的子彈發射位置。 - 建立一個update()方法,把子彈的位置加上bulletVelocityX傳入的數值。
BackgroundSound.java
- 首先在BackgroundSound類別的Constructor內,把bgsound1.mp3傳入Sound物件(sound)內。
- 建立一個playSound()方法,用sound.loop()方法重複播放背景音樂,音量是0至1,0.5f代表設定音量為一半。
GunSound.java
- 首先在GunSound類別的Constructor內,把gun1.mp3傳入Sound物件(sound)內。
- 建立一個playSound()方法,用sound.play()方法播放發射子彈音效,音量是0至1,0.5f代表設定音量為一半。
注意,發射子彈音效不須要重複播放,所以我們不用sound.loop()方法。
MyDemo40.java
- 建立bgSound1和gunSound1變數(Variable)。
- 在create()方法內建立BackgroundSound()物件(bgSound1),並重複播放背景音樂。
再建立GunSound()物件(gunSound1),但不須要播放發射子彈的音效。 - 別忘記呼叫dispose()方法,執行bgSound1.sound.dispose();和gunSound1.sound.dispose(); 釋放資源。
- 在keyDown()執行gunSound1.playSound()方法播放發射子彈的音效。