Loading

9.pygame-键盘捕获

创建英雄类
"""英雄精灵"""


class Hero(GameSprite):
    def __init__(self):
        # 调用父类方法,设置image
        super().__init__('./images/me1.png', 0)
        # 设置英雄的初始位置
        self.rect.centerx = SCREEN_RECT.centerx
        self.rect.bottom = SCREEN_RECT.bottom - 120
# 私有方法-创建精灵、精灵组
def __create_sprites(self):
    # 创建两个背景精灵加入精灵组,实现循环滚动
    background_1 = Background()
    background_2 = Background(True) # 设置True表示交替背景,设置位置
    self.back_group = pygame.sprite.Group(background_1,background_2)

    # 创建敌机精灵组
    self.enemy_group = pygame.sprite.Group()

    # 创建英雄精灵和精灵组
    self.hero = Hero()
    self.hero_group = pygame.sprite.Group(self.hero)
# 私有方法-更新精灵组
def __update_sprites(self):
    self.back_group.update()  # 更新背景精灵组所有精灵
    self.back_group.draw(self.screen)  # 绘制精灵组图像
    self.enemy_group.update() # 更新敌机精灵组精灵
    self.enemy_group.draw(self.screen)
    self.hero_group.update()# 更新英雄精灵组
    self.hero_group.draw(self.screen)
移动英雄位置
pygame中针对键盘按键的捕获,有两种方式
第一种方式判断event.type == pygame.KEYDOWN
第二种方式:
       首先使用pygame.key.get_pressed()返回所有咱家元素
       通过键盘常量,判断元组某一个键是否被按下,如果按下,对应数值为1
两种方法对比:
       第一种方式必须抬起按键,才算一次按键事件
       第二种方法可以按键不放,产生持续移动效果
#第一种方法判断是否按下按键并且按下的键是→方向键
elif event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
        ...

# 第二种方法获取键盘元组
kyes_pressed = pygame.key.get_pressed()
# 判断键盘元组→方向键是否为1
if kyes_pressed[pygame.K_RIGHT]:
..
控制英雄左右

class Hero(GameSprite):
    def __init__(self):
        # 调用父类方法,设置image
        super().__init__('./images/me1.png', 0)
        # 设置英雄的初始位置
        self.rect.centerx = SCREEN_RECT.centerx
        self.rect.bottom = SCREEN_RECT.bottom - 120
    # 重写父类方法,实现左右移动
    def update(self):
        # 英雄在水平方向移动
        self.rect.x += self.speed
        # 控制不能离开屏幕
        # 判断x 小于0 的时候,将x设为0
        if self.rect.x < 0:
            self.rect.x = 0
        # right = x + 窗口宽度 = 右侧
        elif self.rect.right > SCREEN_RECT.right:
            self.rect.right = SCREEN_RECT.right
#事件监听
# 获取键盘元组
kyes_pressed = pygame.key.get_pressed()
# 判断键盘元组→方向键是否为1
if kyes_pressed[pygame.K_RIGHT]:
    self.hero.speed = 2
#判断键盘元组←方向键是否为1
elif kyes_pressed[pygame.K_LEFT]:
    self.hero.speed = -2
else:
    self.hero.speed = 0

 

posted @ 2022-05-22 12:04  木子七  阅读(346)  评论(0编辑  收藏  举报