From 5f595eb14924c98236484e1613bb4392120361ef Mon Sep 17 00:00:00 2001 From: 206530115 <738751407@qq.com> Date: Tue, 22 Jun 2021 16:04:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20''?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 玩家飞机.txt | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 玩家飞机.txt diff --git a/玩家飞机.txt b/玩家飞机.txt new file mode 100644 index 0000000..a980046 --- /dev/null +++ b/玩家飞机.txt @@ -0,0 +1,62 @@ +# Sprite 精灵 +class HeroPlane(pygame.sprite.Sprite): + # 存放所有飞机的子弹的组 + bullets = pygame.sprite.Group() + + def __init__(self, screen): + # 这个精灵的初始化方法 必须调用 + pygame.sprite.Sprite.__init__(self) + # 图片 + self.image = pygame.image.load('./feiji/hero1.png') + # 根据图片image获取矩形的对象 + self.rect = self.image.get_rect() # rect属性:矩形 + self.rect.topleft = [Manager.bg_size[0] / 2 - 100 / 2, 600] # 矩形左上角坐 + # 窗口 + self.screen = screen + # 速度 + self.speed = 15 + # pygame.sprite.Group()生成一个放精灵的对象 类似一个列表 + self.bullets = pygame.sprite.Group() + + def key_control(self): + """ + 按键的监听 用来改变飞机坐标 + """ + # 监听键盘事件 键盘一直按下 + key_pressed = pygame.key.get_pressed() # 注意这种方式是能够检测到连续按下的,比之前的版本要新 + + # 改变飞机坐标 + if key_pressed[K_w] or key_pressed[K_UP]: + self.rect.top -= self.speed + if key_pressed[K_s] or key_pressed[K_DOWN]: + self.rect.bottom += self.speed + if key_pressed[K_a] or key_pressed[K_LEFT]: + self.rect.left -= self.speed + if key_pressed[K_d] or key_pressed[K_RIGHT]: + self.rect.right += self.speed + if key_pressed[K_SPACE]: + # 按下空格键 发射一枚子弹 把飞机的坐标传入子弹 + bullet = Bullet(self.screen, self.rect.left, self.rect.top) + # 把子弹放到列表里 + self.bullets.add(bullet) + # 存放所有飞机的子弹的组 + HeroPlane.bullets.add(bullet) + + # 调用飞机的更新方法 + def update(self): + self.key_control() + self.display() + + def display(self): + """显示飞机到窗口""" + self.screen.blit(self.image, self.rect) + # 更新子弹坐标 + self.bullets.update() + + # 把所有的子弹全部添加到屏幕 + self.bullets.draw(self.screen) + + @classmethod + def clear_bullets(cls): + # 清空子弹 + cls.bullets.empty() \ No newline at end of file