资源简介 (共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! 展开更多...... 收起↑ 资源预览