上一篇已經(jīng)完成了游戲主體部分念秧,本篇開始逐步完善游戲,首先是增加背景和音效聊闯。
背景音樂
背景音樂控制操作比較少:
1工猜、游戲開始循環(huán)播放
2、游戲中點(diǎn)擊"音樂開關(guān)"按鈕停止播放,再次點(diǎn)擊重新循環(huán)播放菱蔬。
我們直接寫進(jìn) Main()
函數(shù)
exp8 添加
pygame.mixer.music.load(Music_backgroud) #加載音頻文件篷帅,背景音樂一般用mp3
pygame.mixer.music.play(-1, 0)
#循環(huán)播放音樂
#參數(shù)1:播放次數(shù),注意這里不是常規(guī)的0表示循環(huán)而是-1拴泌。
#參數(shù)2:表示從音頻的什么位置開始播放魏身,0是從頭開始。
音效
音效調(diào)用比較頻繁蚪腐,發(fā)射子彈箭昵、集中、飛機(jī)刷新……都可以有對(duì)應(yīng)的音效削茁,所以把播放音效封裝成一個(gè)函數(shù)宙枷。
def PlaySound(soundfilename):
if Sound_IsPlay:
#這里引用了一個(gè)全局變量,來判斷是否播放音效茧跋。
#音效調(diào)用的很多慰丛,不能參照背景音樂,自己對(duì)它進(jìn)行關(guān)閉瘾杭、播放操作诅病。
sound = pygame.mixer.Sound(soundfilename)
sound.play()
#是否播放音效 添加全局變量聲明 exp8 添加
Sound_IsPlay = True
在需要音效的位置,添加 PlaySound...
函數(shù)的調(diào)用即可。
游戲中背景音樂贤笆、音效的關(guān)閉及開啟
為了控制背景音樂蝇棉、音效的開關(guān),我們需要添加了兩個(gè)按鈕芥永。
在此之前篡殷,需要先添加一個(gè)按鈕基類。
# exp8 添加
class Button(Base):
def __init__(self, pygame_screen, normal_image, bemoved_image, postion,type):
Base.__init__(self, pygame_screen, postion, normal_image)
self.imageBeMoved = pygame.image.load(bemoved_image)
self.type = type
#選擇鼠標(biāo)經(jīng)過它埋涧,動(dòng)態(tài)顯示的風(fēng)格板辽,
#這里做了兩種風(fēng)格
# 1、dislocation位移:即鼠標(biāo)經(jīng)過棘催,imageBeMoved圖片發(fā)生偏移劲弦,產(chǎn)生陰影或加粗的效果。
# 2醇坝、replace更換圖片:即鼠標(biāo)經(jīng)過邑跪,imageBeMoved圖片顯示,normal_image圖片隱藏呼猪。
def isOver(self):
# 判斷鼠標(biāo)是否經(jīng)過
pointX, pointY = pygame.mouse.get_pos()
inX = self.x < pointX < self.x + self.w
inY = self.y < pointY < self.y + self.h
return inX and inY
def display(self):
# 根據(jù)type來繪制不同的按鈕
if self.isOver():
if self.type == 'dislocation':
self.screen.blit(self.imageBeMoved, (self.x + 1, self.y + 1))
self.screen.blit(self.image, (self.x, self.y))
elif self.type == 'replace':
self.screen.blit(self.imageBeMoved, (self.x, self.y))
else:
self.screen.blit(self.image, (self.x, self.y))
else:
self.screen.blit(self.image, (self.x, self.y))
Main()
函數(shù)中 創(chuàng)建背景画畅、音效開關(guān)按鈕
# 創(chuàng)建背景、音效開關(guān)按鈕 exp8 添加
cbSound = Button(screen, Image_SoundNor, Image_Sound, (406, 810),"replace")
cbMusic = Button(screen, Image_MusicNor, Image_Music, (442, 810),"replace")
Main()
函數(shù)中補(bǔ)充相關(guān)方法和函數(shù)的調(diào)用
#繪制按鈕 exp8 添加
cbSound.display()
cbMusic.display()
#exp8 添加cbSound, cbMusic傳參
MainControl(hero, screen,cbSound, cbMusic)
MainControl
函數(shù)郑叠,已經(jīng)包含了 背景音樂夜赵、音效開關(guān) 按鈕的響應(yīng)處理
if cbmusic:
if event.type == pygame.MOUSEBUTTONDOWN and cbmusic.isOver(): # 關(guān)閉背景音樂
if pygame.mixer.music.get_busy() == 1:
pygame.mixer.music.stop()
else:
pygame.mixer.music.play(-1, 0)
if cbsound:
if event.type == pygame.MOUSEBUTTONDOWN and cbsound.isOver(): # 關(guān)閉音效
global Sound_IsPlay # 修改全局變量
Sound_IsPlay = False if Sound_IsPlay else True # 三目運(yùn)算,更加簡(jiǎn)潔
需要注意乡革,音頻操作需要 pygame.init()
初始化操作。一般寫在主函數(shù)開始位置就可以了摊腋。
本篇講解了背景和音效的操作沸版,下一篇繼續(xù)添加游戲暫停、重新開始游戲兴蒸、展示游戲信息视粮。