今天我想要幫遊戲增加背景音樂與EXIT按鈕
首先從背景音樂開始,我的音樂一樣是在 Pixabay上找的,類型是使用8-bit風格
那方式就跟之前做音效一樣,我們先創建Clip物件,然後建立方法
不過這次我是在GameFrame裡面做的,這樣可以盡可能涵蓋所有Panel,避免在Panel間斷掉
Clip menuMusic;
Clip inGameMusic;
// 跟隨音效大小修改音量
FloatControl menuMusicControl;
FloatControl inGameMusicControl;
// 使用一樣的讀入方法
private void loadMusic() {
try {
InputStream is1 = Objects.requireNonNull(getClass().getResourceAsStream("/menuMusic.wav"));
AudioInputStream audioInputStream1 = AudioSystem.getAudioInputStream(new BufferedInputStream(is1));
menuMusic = AudioSystem.getClip();
menuMusic.open(audioInputStream1);
menuMusicControl = (FloatControl) menuMusic.getControl(FloatControl.Type.MASTER_GAIN);
InputStream is2 = Objects.requireNonNull(getClass().getResourceAsStream("/inGameMusic.wav"));
AudioInputStream audioInputStream2 = AudioSystem.getAudioInputStream(new BufferedInputStream(is2));
inGameMusic = AudioSystem.getClip();
inGameMusic.open(audioInputStream2);
inGameMusicControl = (FloatControl) inGameMusic.getControl(FloatControl.Type.MASTER_GAIN);
} catch(Exception e) {
System.out.println("Error " + e);
}
}
public void playMenuMusic() {
// 如果主畫面音樂或遊戲音樂正在播放就先暫停
if (menuMusic.isRunning()) {
menuMusic.stop();
}
if (inGameMusic.isRunning()) {
inGameMusic.stop();
}
// 繼續主畫面音樂
menuMusic.start();
// 使用loop讓他可以無限循環
menuMusic.loop(Clip.LOOP_CONTINUOUSLY);
}
public void playInGameMusic() {
// 如果主畫面音樂或遊戲音樂正在播放就先暫停
if (menuMusic.isRunning()) {
menuMusic.stop();
}
if (inGameMusic.isRunning()) {
inGameMusic.stop();
}
// 每次進遊戲時重設音樂位址為0(重制)
inGameMusic.setFramePosition(0);
// 循環播放
inGameMusic.loop(Clip.LOOP_CONTINUOUSLY);
}
而讓它在接收SettingPanel修改的音量時,就直接更改本地的音樂音量大小
public void setVolume(float volume){
this.soundVolume = volume;
menuMusicControl.setValue(soundVolume);
inGameMusicControl.setValue(soundVolume);
}
接下來要做的就是EXIT按鈕,我打算加在主畫面跟遊戲結束畫面兩個地方
使用JButton
JButton exitButton;
exitButton = new JButton("EXIT →");
exitButton.setFont(new Font("Times New Roman", Font.ITALIC, 30));
exitButton.setForeground(wordC);
exitButton.setBackground(backgroundC);
exitButton.setBorderPainted(false);
exitButton.setFocusPainted(false);
exitButton.setBounds(575, 400, 200, 50);
exitButton.addActionListener(e->System.exit(0));
這樣就完成今天的任務了!
今天的工作稍微簡單一點,大概都是把前幾天做過的東西稍微重新組合一下,不過至此我的貪食蛇遊戲也差不多製作完成了!
明天要學習如何使用最基本的git,並把我的專案上傳到github!