python及pygame雷霆戰(zhàn)機(jī)游戲項(xiàng)目實(shí)戰(zhàn)08 聲音和音樂

項(xiàng)目詳細(xì)介紹

項(xiàng)目詳細(xì)介紹

在這個(gè)系列中,將制作一個(gè)雷霆戰(zhàn)機(jī)游戲。

GIF.gif

聲音的力量

對(duì)于游戲,需要一個(gè)“射擊”聲音和一個(gè)“爆炸”聲音。創(chuàng)建一個(gè)“snd”文件夾(就像為圖像所做的那樣)并將WAV文件放在那里。

請(qǐng)注意,有兩種爆炸聲。這樣,可以在它們之間隨機(jī)選擇,讓流星爆炸中有一點(diǎn)變化。

最后,需要一些背景音樂。

為游戲添加聲音

將聲音添加到游戲中。需要指定聲音文件夾的位置:

# Frozen Jam by tgfcoder <https://twitter.com/tgfcoder> licensed under CC-BY-3
# Art from Kenney.nl
import pygame
import random
from os import path

img_dir = path.join(path.dirname(__file__), 'image')
snd_dir = path.join(path.dirname(__file__), 'snd')

接下來,需要加載聲音文件。

# Load all game sounds
shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))

將聲音加載并分配給變量shoot_sound,希望每當(dāng)玩家發(fā)射子彈時(shí)都會(huì)播放聲音,所以將其添加到shoot()方法中:

    def shoot(self):
        bullet = Bullet(self.rect.centerx, self.rect.top)
        all_sprites.add(bullet)
        bullets.add(bullet)
        shoot_sound.play()

接下來,添加爆炸聲。將加載它們并將它們放在一個(gè)列表中:

# Load all game sounds
shoot_sound = pygame.mixer.Sound(path.join(snd_dir, 'pew.wav'))
expl_sounds = []
for snd in ['expl3.wav', 'expl6.wav']:
    expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))

為了讓爆炸發(fā)揮作用,每當(dāng)摧毀流星時(shí),都會(huì)隨機(jī)選擇其中一個(gè)播放:

    # check to see if a bullet hit a mob
    hits = pygame.sprite.groupcollide(mobs, bullets, True, True)
    for hit in hits:
        score += 50 - hit.radius
        random.choice(expl_sounds).play()
        m = Mob()
        all_sprites.add(m)
        mobs.add(m)

音樂

最后要做的是添加一些背景音樂,這將為游戲帶來很多個(gè)性和情感。

首先,加載音樂:

expl_sounds = []
for snd in ['expl3.wav', 'expl6.wav']:
    expl_sounds.append(pygame.mixer.Sound(path.join(snd_dir, snd)))
pygame.mixer.music.load(path.join(snd_dir, 'tgfcoder-FrozenJam-SeamlessLoop.ogg'))
pygame.mixer.music.set_volume(0.4)

這個(gè)音樂文件恰好相當(dāng)響亮,不希望它壓倒其他聲音,所以也將音量設(shè)置為最大音量的40%。

要播放音樂,您只需選擇歌曲應(yīng)該在代碼中的哪個(gè)位置開始播放,在情況下就是在游戲循環(huán)開始之前:

score = 0
pygame.mixer.music.play(loops=-1)
# Game loop
running = True

loops參數(shù)是指定你想要的歌曲重復(fù)播放的次數(shù)。通過設(shè)置loops-1,把它無限重復(fù)。

在下一課中,將為玩家添加一些盾牌,這樣就不會(huì)那么容易死亡。

項(xiàng)目源碼及資源

獲取地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容