iT邦幫忙

2025 iThome 鐵人賽

DAY 28
0
Software Development

30天從基礎學起Java,直到做出我的第一個遊戲系列 第 28

Day 28:Java Snake Game 設定功能(三)

  • 分享至 

  • xImage
  •  

今天我想要幫遊戲增加背景音樂與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按鈕

接下來要做的就是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));

image

這樣就完成今天的任務了!
今天的工作稍微簡單一點,大概都是把前幾天做過的東西稍微重新組合一下,不過至此我的貪食蛇遊戲也差不多製作完成了!
明天要學習如何使用最基本的git,並把我的專案上傳到github!


上一篇
Day 27:Java Snake Game 設定功能(二)
下一篇
Day 29:使用git並上傳專案至github
系列文
30天從基礎學起Java,直到做出我的第一個遊戲30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言