资源简介 (共16张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.少儿编程课飞机大战3本节我们来继续完善这个小游戏,增加陨石掉落和发射子弹等功能陨石精灵的添加和飞机精灵一样,我们同样通过精灵类来创建陨石精灵1创建陨石精灵类、定义初始化方法2设定陨石随机出现的位置这里先使用红色方块代替陨石# 陨石精灵class Meteorite(pygame.sprite.Sprite):def __init__(self):# 初始化pygame.sprite.Sprite.__init__(self)# 定义陨石的图形self.image = pygame.Surface((30, 40))# 定义陨石的颜色为红色self.image.fill((255, 0, 0))# 获取陨石的长方形self.rect = self.image.get_rect()# 设置陨石出现的x轴坐标:随机出现在0~屏幕宽度‐陨石本身宽度的位置self.rect.x = random.randrange(WIDTH - self.rect.width)# y轴坐标self.rect.y = random.randrange(-100, -40)3设定陨石的飞行速度self.speedy = random.randrange(1, 8)# x轴速度self.speedx = random.randrange(-3, 3)4增加update方法,指定陨石运行规则def update(self):self.rect.x += self.speedxself.rect.y += self.speedy陨石精灵编写完成之后,添加到精灵组,这里为什么要使用精灵组呢?只有一个飞机精灵时,我们调用它的update方法并画到屏幕需要这样做而如果有很100个飞机精灵,同时还有很多陨石精灵,那么……统一渲染统一更新update如果我们使用精灵组player.update()screen.blit(player.image, player.rect)如果有三个飞机精灵精灵组player.update()screen.blit(player.image, player.rect)player.update()screen.blit(player.image, player.rect)player.update()screen.blit(player.image, player.rect)将创建好的精灵添加到精灵组之后,我们就可以:现在我们就创建全部精灵组,统一管理飞机和陨石定义全部精灵组,加入飞机与陨石# 定义玩家飞机对象player = Player()# 定义全部精灵组all_sprites = pygame.sprite.Group()# 将飞机加入精灵组all_sprites.add(player)# 定义8个陨石并加入到精灵组all_spritesfor i in range(8):met = Meteorite()all_sprites.add(met)这段代码创建了一个精灵组,并将飞机精灵和创建的8个陨石精灵都添加到了精灵组中12在死循环中,调用精灵组的update方法all_sprites.update()all_sprites.draw(screen)3将所有精灵绘制到屏幕中使用精灵组之后,不需要去调用每一个精灵update方法,也不必把每一个精灵都blit到屏幕上,只需要对精灵组进行操作就可以统一管理。运行程序,观察陨石掉落效果:观察效果可以看到,陨石只出现了8个,过后不在生成新的陨石,如何让陨石一直产生呢?1在陨石掉落出屏幕之后,使其回到初始位置即可2在update方法中增加如下判断if self.rect.top > HEIGHT + 10 or self.rect.left < -30 or self.rect.right > WIDTH + 30:self.rect.x = random.randrange(WIDTH - self.rect.width)self.rect.y = random.randrange(-100, -40)运行程序,陨石雨效果如下:子弹精灵的添加1创建子弹精灵类,定义初始化方法飞机和陨石群的效果都已制作完成,现在为飞机添加发射子弹的功能2设置子弹的位置为传入的x和y、设置子弹移动速度# 子弹class Bullet(pygame.sprite.Sprite):def __init__(self, x, y):pygame.sprite.Sprite.__init__(self)self.image = pygame.Surface((10, 20))self.image.fill((255, 255, 0))self.rect = self.image.get_rect()self.rect.bottom = yself.rect.centerx = x# 设置子弹的速度,子弹是从下往上的,所以为负self.speedy = -101在飞机精灵类中添加发射子弹的方法3添加update方法,使子弹移动飞机和陨石群的效果都已制作完成,现在为飞机添加发射子弹的功能2在死循环的事件中设置子弹发射的时机,例如按下空格键时def update(self):self.rect.y += self.speedy# 添加射击的功能def shoot(self):# 定义子弹bullet = Bullet(self.rect.centerx, self.rect.top)# 将子弹加入全部精灵组和子弹精灵组all_sprites.add(bullet)发射子弹是飞机的行为,所以在飞机精灵类中定义射击功能。if event.key == pygame.K_SPACE:player.shoot()该方法首先产生一颗子弹,然后将子弹加入精灵组。在死循环中由于调用了all_sprites的update方法,子弹就会自动运行。效果演示与移动出屏幕外的子弹处理2运行程序,按空格键1为了节省内存,在子弹的update方法中添加删除功能if self.rect.bottom < 0:self.kill()总结SummaryPygame精灵类√Pygame精灵组的使用√Thanks! 展开更多...... 收起↑ 资源预览