用Python和Pygame寫遊戲-從入門到精通(22)

發表於2015-12-22

辛苦啦~ 這次是我們系統的pygame理論學習的最後一章了,把這次的音樂播放講完了,pygame的基礎知識就全部OK了。不過作為完整的教程,只有理論講解太過枯燥了,我隨後還會加一個或更多的實踐篇系列,看需要可能也會追加真3D等額外的內容。

就像上次所說的,pygame.mixer並不適合播放長時間的音樂播放,我們要使用pygame.mixer.music。

pygame.mixer.music用來播放MP3和OGG音樂檔案,不過MP3並不是所有的系統都支援(Linux預設就不支援MP3播放),所以最好還是都用Ogg檔案,我們可以很容易把MP3轉換為Ogg檔案,自己搜一下吧。

我們使用pygame.mixer.music.load()來載入一個檔案,然後使用pygame.mixer.music.play()來播放,這裡並沒有一個類似Music這樣的類和物件,因為背景音樂一般般只要有一個在播放就好了不是麼~不放的時候就用stop()方法來停止就好了,當然很自然有類似錄影機上的pause()和unpause()方法。

音效和音樂方法總結

Sound物件

方法名 作用
fadeout 淡出聲音,可接受一個數字(毫秒)作為淡出時間
get_length 獲得聲音檔案長度,以秒計
get_num_channels 聲音要播放多少次
get_volume 獲取音量(0.0 ~ 1.0)
play 開始播放,返回一個Channel物件,失敗則返回None
set_volume 設定音量
stop 立刻停止播放

Channels物件

方法名 作用
fadeout 類似
get_busy 如果正在播放,返回true
get_endevent 獲取播放完畢時要做的event,沒有則為None
get_queue 獲取佇列中的聲音,沒有則為None
get_volume 類似
pause 暫停播放
play 類似
queue 將一個Sound物件加入佇列,在當前聲音播放完畢後播放
set_endevent 設定播放完畢時要做的event
set_volume 類似
stop 立刻停止播放
unpause 繼續播放

Music物件:

方法名 作用
fadeout 類似
get_endevent 類似
get_volume 類似
load 載入一個音樂檔案
pause 類似
play 類似
rewind 從頭開始重新播放
set_endevent 類似
set_volume 類似
stop 立刻停止播放
unpause 繼續播放
get_pos 獲得當前播放的位置,毫秒計

雖然很簡單,不過還是提供一個例程吧,這裡面音樂的播放很簡單,就是上面講過的,不過其中還有一點其他的東西,希望大家學習一下pygame中按鈕的實現方法。

介面如上,執行的時候,指令碼讀取./MUSIC下所有的OGG和MP3檔案(如果你不是Windows,可能要去掉MP3的判斷),顯示的也很簡單,幾個控制按鈕,下面顯示當前歌名(顯示中文總是不那麼方便的,如果你執行失敗,請具體參考程式碼內的註釋自己修改):

 

這個程式雖然可以執行,還是很簡陋,有興趣的可以改改,比如顯示播放時間/總長度,甚至更厲害一點,滑鼠移動到按鈕上班,按鈕會產生一點變化等等,我們現在已經什麼都學過了,唯一欠缺的就是實踐而已!

所以下一次,我將開始一個實戰篇,用pygame書寫一個真正可以玩的遊戲,敬請期待~~

本次使用的幾個影象檔案打包下載(也可以自己找更帥的)。

相關文章