中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

小學課后服務 Python少兒編程 進階篇:15-飛機大戰6 課件 (13張PPT)

資源下載
  1. 二一教育資源

小學課后服務 Python少兒編程 進階篇:15-飛機大戰6 課件 (13張PPT)

資源簡介

(共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
首先在初始化飛機的時候,給定血量100
2
當隕石和飛機相碰,飛機扣除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、隕石和飛機碰撞的時
2
1
將飛機生命值畫到屏幕中
使用之前的draw_text方法,將飛機剩余血量繪制到屏幕左上角
運行程序,效果如下:
2
1
# 繪制生命值
draw_text(screen, 'hp:'+str(player.hp), 18, 30, 10)
爆炸效果
爆炸效果的添加
2
爆炸效果也是精靈,不同與子彈等精靈,爆炸精靈不會沿x、y軸運動,它最大的特點就是圖片在一直變化,組成幀動畫的效果,如我們經常見到的GIF動態圖
1
將素材準備好,可以自行選擇,這里以藍色為例
爆炸精靈類的創建
2
將素材存入列表
1
explosion_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 = 0
def update(self):
self.frame += 1
if 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 = 50
def 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!

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 阜宁县| 镇原县| 灌云县| 嫩江县| 金溪县| 鄂托克旗| 芦山县| 柘城县| 太仆寺旗| 甘谷县| 新巴尔虎左旗| 拉萨市| 崇信县| 玉林市| 寻甸| 衢州市| 巫山县| 昭苏县| 沧州市| 南和县| 故城县| 邯郸县| 滦平县| 巨鹿县| 定兴县| 鲁甸县| 永兴县| 蒙阴县| 顺平县| 合作市| 南雄市| 额尔古纳市| 台中县| 夏河县| 黄浦区| 定安县| 敦煌市| 本溪| 安庆市| 庄河市| 阳城县|