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

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

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

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

資源簡介

(共18張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.
少兒編程課
飛機大戰5
本節我們優化碰撞檢測,并添加計分機制,完善飛機大戰游戲效果
碰撞檢測的優化
如果仔細觀察游戲效果,你會發現隕石還沒有碰到飛機,就發生了碰撞檢測,游戲結束
這是因為雖然隕石和飛機是不規則的形狀,但是碰撞檢測還是以圖片的長方形來判斷的。以下圖為例:
明白了原因之后,接下來我們想辦法優化一下碰撞檢測
隕石圖片
隕石本身
飛機圖片
飛機本身
圖片邊緣已經碰撞
飛機和隕石本身并沒有碰到
優化碰撞檢測的方法:將飛機和隕石當做圓來處理
2
3
為spritecollide添加第四個參數pygame.sprite.collide_circle
之前說過,這個參數可以指定一個回調函數,能夠定制一些特殊的檢測方法,pygame.sprite.collide_circle就是pygame提供的用來檢測兩個圓是否碰撞的函數
將隕石當作圓來處理,指定半徑
hits = pygame.sprite.spritecollide(player, all_meteorite, True, pygame.sprite.collide_circle)
# 把隕石當做圓處理,設定隕石的半徑
self.radius = int(self.rect.width * 0.85 / 2)
# pygame.draw.circle(self.image, COLOR_GREEN, self.rect.center, self.radius)
# 把飛機當圓處理,設置飛機圓的半徑
self.radius = 20
# pygame.draw.circle(self.image, COLOR_GREEN, self.rect.center, self.radius)
因為隕石外面有透明部分,可以先乘以0.85去掉透明部分然后再除以2作為半徑。
兩個設定半徑后跟的一行代碼表示繪制指定半徑的一個圓,這樣可以更直觀的看到把飛機和隕石當成圓的樣子。
1
將飛機當作圓來處理,指定半徑
運行程序,效果如下:
素材豐富與記分機制
接下來,我們豐富掉落的隕石類型
1
首先把所有隕石的圖片效果列出來存到列表中
3
最后在隕石的初始化方法中,隨機選定一個圖片即可
4
運行程序,效果如下:
2
然后循環獲取所有圖片
meteor_list = ['img_meteorite_01.png', 'img_meteorite_02.png',
'img_meteorite_03.png','img_meteorite_04.png',
'img_meteorite_05.png','img_meteorite_06.png',
'img_meteorite_07.png', 'img_meteorite_08.png']
# 循環獲取所有圖片
meteor_images = []
for img in meteor_list:
meteor_images.append(pygame.image.load('img/' + img))
# 隨機獲取列表中的某一項
self.image = random.choice(meteor_images)
飛機打隕石的過程已經做好了,下面我們給游戲添加計分機制
1
定義繪制計分的方法,首先設置字體和大小
# 定義繪制計分的方法
def draw_text(surf, text, size, x, y):
# 設置畫筆的字體
font_name = pygame.font.match_font('arial')
# 設置畫筆的字體和大小
font = pygame.font.Font(font_name, size)
3
# 將字體繪制到屏幕上
surf.blit(text_surface, text_rect)
2
創建字體的矩形區域并設置位置
# 繪制內容:text為內容,True為是否抗鋸齒,字體顏色為白色
text_surface = font.render(text, True, (255, 255, 255))
# 設置字體的矩形
text_rect = text_surface.get_rect()
# 設置字體的位置
text_rect.midtop = (x, y)
使用blit方法將創建好的字體繪制到屏幕
4
定義變量score表示分數,初始值為0,每次子彈與隕石碰撞加五分。
score = 0
for hit in hits:
# 分數增加
score += 5
……
5
在死循環中調用繪制計分方法將分數繪制到屏幕中
# 繪制分數
draw_text(screen, str(score), 18, WIDTH / 2, 10)
運行程序,效果如下:
音效添加
一個好的游戲,好的音效是必不可少的,現在我們就為游戲添加音效
1
在工程目錄下新建snd文件夾,將準備好的音效添加進來
2
初始化pygame處理音效模塊mixer模塊
3
使用mixer將本地的聲音加載到程序中
4
最后,在子彈的shoot方法中,調用聲音的play方法
# 初始化mixer模塊
pygame.mixer.init()
# 加載子彈發生的聲音
shoot_sound = pygame.mixer.Sound('snd/shoot.wav')
# 調用發射子彈的聲音
shoot_sound.play()
練習
Exercises








子彈碰撞上隕石準備了兩種音效,在子彈碰撞上隕石時,隨機播放。
接著,為整個游戲添加背景音樂
1
使用mixer中的music模塊加載音樂
2
在死循環進行游戲開始之前,調用背景音樂的play()方法
3
在play()中添加loops參數,值設為-1,使音樂循環播放
# 定義游戲的背景音樂
pygame.mixer.music.load('snd/music_bg.mp3')
pygame.mixer.music.play()
# 循環播放背景音樂
pygame.mixer.music.play(loops=-1)
運行程序,效果如下:
總結
Summary
Pygame碰撞檢測的優化處理

pygame字體繪制

Pygame聲音素材的添加

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. 主站蜘蛛池模板: 唐河县| 呼玛县| 砀山县| 扶沟县| 金湖县| 类乌齐县| 合作市| 黑山县| 南宫市| 长乐市| 贡山| 凤山县| 浑源县| 六盘水市| 同江市| 皋兰县| 武义县| 保亭| 德化县| 长寿区| 建湖县| 隆安县| 牙克石市| 池州市| 临沭县| 揭东县| 汽车| 兴隆县| 鄯善县| 肃南| 安泽县| 吴江市| 玛沁县| 资源县| 石台县| 中超| 石景山区| 菏泽市| 新泰市| 贵阳市| 盐池县|