首先我们需要明确我们的目标:
分析一下飞机大战的各自组成部分;
在游戏循环的部分我们需要:
# 1. 设置刷新帧率,为了让我们看到动画效果
# 2. 事件监听,检测我们按下左右键或者其他键的时候做出相关的反映
# 3. 碰撞检测,需要检测子弹是否碰到了敌人的飞机,检测我方飞机是否碰到敌人飞机,然后做出相关的动作
# 4. 更新精灵组,经过了事件监听等,比如移动飞机位置、还有敌人的飞机向下移动,等需要更新各个精灵组。
# 5. 更新屏幕显示
关于精灵和精灵组:
首先我们要明确:我们需要重写精灵。
class GameSprite(pygame.sprite.Sprite):
def __init__(self, image_name, speed=1):
super().__init__()
self.image = pygame.image.load(image_name)
self.rect = self.image.get_rect()
self.speed = speed
def update(self, *args):
self.rect.y += self.speed
然后我们需要创建如下精灵类:
背景精灵类:
为了实现让背景有滚动的效果,我们用两张背景图片
下面是背景精灵类的代码:
如果设置的是在上面的图片的话, 在初始化的过程中需要把图片的位置修改一下,所以 is_alt是用来判断的
(SCREEN_RECT)是创建的屏幕大小
SCREEN_RECT = pygame.Rect(0, 0, 480, 700)
# 创建游戏背景类
class BackGround(GameSprite):
def __init__(self, is_alt=False):
image_name = "./images/background.png"
super().__init__(image_name)
if is_alt:
self.rect.y = -self.rect.height
def update(self, *args):
# 继承父类的update(),保证往下一点点移动
super().update()
# 扩展父类的方法,当 当前背景图像移动到屏幕底端时,更新当前背景图像的位置
if self.rect.y >= SCREEN_RECT.height:
self.rect.y = -SCREEN_RECT.height
然后我们需要创建敌人飞机的精灵类:
代码如下