資源簡介 (共13張PPT)Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.少兒編程課飛機大戰6飛機生命值在之前的版本中,隕石碰到飛機,游戲立馬結束,接下來我們為飛機添加生命值1首先在初始化飛機的時候,給定血量1002當隕石和飛機相碰,飛機扣除20點血量如果血量扣完了,則游戲結束3當隕石和飛機相碰,隕石消失,為防止隕石數量減少,在生成一個隕石出來self.hp = 100# 檢測飛機和隕石之間的碰撞hits = pygame.sprite.spritecollide(player, all_meteorite, True, pygame.sprite.collide_circle)for hit in hits:player.hp ‐= 20# 如果碰撞,則游戲結束if player.hp == 0:running = False# 檢測飛機和隕石之間的碰撞hits = pygame.sprite.spritecollide(player, all_meteorite, False, pygame.sprite.collide_circle)for hit in hits:player.hp -= 20# 新產生一個隕石并加入兩個精靈組meteorite = Meteorite()all_sprites.add(meteorite)all_meteorite.add(meteorite)# 如果碰撞,則游戲結束if player.hp == 0:running = False簡化代碼對于這種重復性出現的代碼,我們可以用方法替代重復3然后在上述三個對應的地方調用new_meteorite()方法就可以了# 新產生一個隕石并加入兩個精靈組meteorite = Meteorite()all_sprites.add(meteorite)all_meteorite.add(meteorite)這時,你可能發現了,產生一個新隕石,并把隕石加入到隕石和全部精靈組代碼在程序中出現了好幾次# 新產生一個隕石并加入兩個精靈組new_meteorite():meteorite = Meteorite()all_sprites.add(meteorite)all_meteorite.add(meteorite)1、循環8次,生成8個隕石時2、子彈打掉隕石時3、隕石和飛機碰撞的時21將飛機生命值畫到屏幕中使用之前的draw_text方法,將飛機剩余血量繪制到屏幕左上角運行程序,效果如下:21# 繪制生命值draw_text(screen, 'hp:'+str(player.hp), 18, 30, 10)爆炸效果爆炸效果的添加2爆炸效果也是精靈,不同與子彈等精靈,爆炸精靈不會沿x、y軸運動,它最大的特點就是圖片在一直變化,組成幀動畫的效果,如我們經常見到的GIF動態圖1將素材準備好,可以自行選擇,這里以藍色為例爆炸精靈類的創建2將素材存入列表1explosion_anim = []for i in range(9):img = pygame.image.load('img/picV382_boom_baiYin_00' + str(i) + '.png')explosion_anim.append(img)# 爆炸效果class Explosion(pygame.sprite.Sprite):def __init__(self, center):pygame.sprite.Sprite.__init__(self)# 初始圖片為爆炸的第一張圖self.image = explosion_anim[0]self.rect = self.image.get_rect()# 指定爆炸的中心點self.rect.center = center創建爆炸精靈類,定義初始化方法3在初始化方法中定義一個用于表示圖片下標的變量# 當前圖片的下標self.frame = 0def update(self):self.frame += 1if self.frame == len(explosion_anim):self.kill()else:# 更換圖片,達到幀動畫的效果self.image = explosion_anim[self.frame]4創建爆炸精靈類,定義初始化方法爆炸精靈類創建完成,接下來在子彈和隕石以及飛機和隕石碰撞時產生一個爆炸精靈2子彈和隕石碰撞時1飛機和隕石碰撞時3運行程序,效果如下:# 爆炸效果expl = Explosion(hit.rect.center)all_sprites.add(expl)# 爆炸效果expl = Explosion(hit.rect.center)all_sprites.add(expl)注意:這里不要忘了將爆炸精靈也加入到all_sprite精靈組中,這樣Explosion的update方法才能被調用,我們才能看到爆炸的效果。根據運行效果可以發現:爆炸效果太大了、爆炸的時間太短現在,來解決爆炸效果不佳的問題2在定義n張爆炸圖片的地方,縮放一下圖片1在初始化方法中,定義一個用于規定多長時間切換一張圖片的時間間隔3同樣使用pygame的time模塊控制游戲節奏explosion_anim = []for i in range(9):img = pygame.image.load('img/picV382_boom_baiYin_00' + str(i) + '.png')# 縮放圖片img = pygame.transform.scale(img, (150, 150))explosion_anim.append(img)# 切換時間的間隔為50毫秒self.framerate = 50# 爆炸效果class Explosion(pygame.sprite.Sprite):def __init__(self, center):……self.last_update = pygame.time.get_ticks()self.frame_rate = 50def update(self):now = pygame.time.get_ticks()if now ‐ self.last_update > self.frame_rate:self.last_update = now……在Explosion的__init__方法中,我們先記一次時,然后在update方法中再次記一下時,讓這兩個時間的間隔和上面定義的frame_rate作對比就可以了練習Exercises密封線內不準答題同樣的道理,嘗試來控制子彈發射的節奏Thanks! 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫