資源簡介 (共15張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.少兒編程課飛機大戰4本節我們來增加子彈和隕石、飛機和隕石之間的碰撞效果,并使用圖片素材替換方塊碰撞檢測1創建子彈與隕石精靈組2分別在產生隕石和子彈的地方,加入相應的精靈組# 定義隕石精靈組all_meteorite = pygame.sprite.Group()# 定義子彈精靈組all_bullets = pygame.sprite.Group()# 定義8個隕石并加入到精靈組all_spritesfor i in range(8):…# 在循環產生隕石時,加入隕石精靈組all_meteorite.add(met)def shoot(self):…# 在飛機的shoot方法中產生子彈時,加入子彈精靈組all_bullets.add(bullet)接著來看碰撞,pygame提供了處理精靈組之間碰撞的函數精靈組的碰撞—groupcollide函數原型groupcollide(group1, group2, dokill1, dokill2, collided = None) ‐>Sprite_dictgroup1 : 精靈組1group2 : 精靈組2dokill1 : 發生碰撞時,是否銷毀精靈組1中的發生碰撞的精靈。dokill2 : 發生碰撞時,是否銷毀精靈組2中的發生碰撞的精靈。collided :自定義的回調函數,你可以自己編寫碰撞檢測函數。碰撞檢測函數的參數是兩個精靈,返回值是True/False返回值是一個字典,鍵是精靈組1中發生碰撞的精靈,值是精靈組2中與該精靈發生碰撞的精靈的列表。現在來添加子彈與隕石的碰撞檢測1精靈組碰撞處理2由于碰撞后銷毀了隕石,所以需要在碰撞后添加一個新的隕石出來# 檢測子彈組和隕石組是否碰撞hits = pygame.sprite.groupcollide(all_meteorite, all_bullets, True, True)# 如果碰撞了,則重新生成一個隕石,并加入到all_sprites和all_meteorite精靈組for hit in hits:meteorite = Meteorite()all_sprites.add(meteorite)all_meteorite.add(meteorite)運行程序,體驗一下效果飛機和隕石的碰撞效果1增加飛機與隕石的碰撞檢測2運行程序,體驗效果不同與子彈和隕石,飛機與隕石是精靈和精靈組之間的碰撞。單個精靈和某個精靈組之間的碰撞檢測,使用spritecollide方法# 檢測飛機和隕石之間的碰撞hits = pygame.sprite.spritecollide(player, all_meteorite, True)# 如果碰撞,則游戲結束if hits:running = False改頭換面在前面的課程中,無論是飛機、隕石還是子彈,我們都是使用方塊代替的,現在我們就把他們換成真正的圖片素材1在工程目錄新建img文件夾,然后將素材拷貝到文件夾中2首先替換隕石圖片# 定義隕石的圖形self.image = pygame.Surface((30, 40))# 定義隕石的顏色為紅色self.image.fill((255, 0, 0))在Meteorite類的__init__方法中,我們將更換為:self.image = pygame.image.load("img/img_meteorite.png")練習Exercises密封線內不準答題將飛機的圖片、子彈的圖片都更改在原先設置背景顏色的地方,修改成如下代碼更改游戲的背景,效果演示# 繪制屏幕的背景顏色# screen.fill(COLOR_BLACK)background=pygame.image.load("img/img_bg.jpg").convert()screen.blit(background,background.get_rect())1運行程序,效果如下:2總結SummaryPygame中的碰撞效果√Pygame素材導入√Thanks! 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫