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