首先觀察之前的指令碼,main()
函式586-696共110行,閱讀起來還是比較費勁。
經過完善,壓縮到了26行,結構也非常清晰,而且本次修改,還新增了很多新效果,比如敵機boss花式子彈、更完善的狀態顯示、敵機重新整理機制……。
之前的音效、背景**預設音量太大了,先給playsound
函式加一句,讓耳朵清淨一下。
sound.set_volume(
0.1)
def
playmusic
(musicfilename)
: pygame.mixer.music.load(musicfilename)
pygame.mixer.music.play(-1
,0) pygame.mixer.music.set_volume(
0.1)
正式開始本次指令碼的完善
一、將圖中標記的函式和main
函式中的部分流程,封裝成乙個物件。
指令碼比較長,這裡就不發了,在之前提供的網盤共享會有完整原始碼。
物件結構如圖,也就是將之前的函式封裝成方法。
二、類屬性的應用
之前的子彈、補給包、敵機,是在函式中宣告了列表變數來儲存。
那麼物件中要對這些列表操作,就需要把它做為引數傳入,比如英雄飛機,要發射子彈,就要傳入這個子彈列表:
def
__init__
(self, pygame_screen, bullets)
:
而且,每次建立物件都需要操作列表
所以這裡用類屬性來替代列表變數,在有需要的類中宣告列表group,__init__
方法中新增:
這樣就可以和全域性變數一樣的方便引用
修改以後要把原來需要傳的引數刪除,比如圖中的hero:
pygame飛機大戰開發實錄3
通過之前的講解,了解了一些相關原理和基本的控制方法。接下來就可以開始編寫 飛機大戰 了。開始之前,先說一說,為什麼要以物件化程式設計,之前的例子裡的指令碼,都是以過程化編寫,而實際開發則以物件化為主。這裡把飛機移動的指令碼,按物件化重新編寫,右邊是原來的指令碼。乍一看,物件化好像要複雜一些。進一步觀...
pygame飛機大戰3
self.destroy images.extend pygame.image.load images enemy1 down1.png convert alpha pygame.image.load images enemy1 down2.png convert alpha pygame.imag...
pygame飛機大戰4
pygame.mask.from su ce self,image 對的非透明部分做標記 pygame.sprite.spritecollide b,enemies,false,pygame.sprite.collide mask 完美檢測碰撞 me.rect.midtop,子彈生成在飛機的中間的頂...