pygame中关于key.get_pressed() 问题

在Python游戏编程中,创建了一个名为classMainmenu的类,处理game_guanka_state的状态和用户输入。遇到的问题是,当按下未定义的键后,再按右键K_RIGHT,其检测到的按键状态变为False,但切换窗口后恢复正常。问题可能与按键缓冲或者事件处理有关。
摘要由CSDN通过智能技术生成
class Mainmenu():
    def __init__(self):
        self.state = game_guanka_state
        self.name = '主控类'
        self.screen = p.display.get_surface()
        self.guanka = game_guanka_states[game_guanka_state]
    def check_state(self):
        if self.state!=game_guanka_state:
            self.guanka = game_guanka_states[game_guanka_state]
            self.state=game_guanka_state
    def update(self):
        keys=p.key.get_pressed()
        print(keys[p.K_RIGHT])
        self.check_state()
        self.guanka.update(keys)
guanka里我定义了上下左右键该做什么,其余键没有定义,我按下上下左右键都能出发事件,但是当我按下其他键后,再按右键,这个print(keys[p.K_RIGHT])就都是False了,当我切换下窗口后,又能正常了,我不明白,那位大佬给解惑下。
def game_run():
    mainmenu = Mainmenu()
    while True:
        for ev in p.event.get():
            if ev.type == p.QUIT:
                p.display.quit()
                sys.exit()
        mainmenu.update()
        p.display.update()
        p.time.Clock().tick(Info.teps)
### 回答1: pygame.key.get_pressed() 是 pygame的一个函数,它可以返回一个字典,字典的键是键盘上的按键编号,值是按键是否被按下的布尔值。例如,若按下了 A 键,那么字典键为 K_a 的值为 True。 ### 回答2: pygame.key.get_pressed() 是一个函数,用于获取当前键盘上所有按键的状态。在 pygame ,键盘按键按下时会发送一个键盘事件,而 pygame.key.get_pressed() 函数则可以获取到这些事件的状态。该函数返回一个长度为 512 的布尔类型列表,其每个元素表示一个按键的状态,当该按键被按下时,对应的元素值为 True,否则为 False。 为了方便使用,pygame 还提供了常量来表示常用的键盘按键,例如 pygame.K_RETURN 表示回车键,pygame.K_ESCAPE 表示 ESC 键。可以使用这些常量来判断某个键是否被按下,例如: ```python import pygame pygame.init() window = pygame.display.set_mode((640, 480)) while True: for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() quit() keys = pygame.key.get_pressed() if keys[pygame.K_UP]: print('UP is pressed') if keys[pygame.K_LEFT]: print('LEFT is pressed') pygame.quit() ``` 在上面的示例代码,我们不断循环监听键盘事件和按键状态,当 ESC 键被按下时退出程序。同时,我们使用了常量 pygame.K_UP 和 pygame.K_LEFT 来判断上下左右箭头是否被按下,如果按下则打印相应的信息。通过这种方式,我们可以在游戏实现对键盘按键的实时响应,从而让玩家更加流畅地控制游戏。 ### 回答3: pygame.key.get_pressed()是Pygame的键盘事件相关函数,它返回一个布尔类型数组,表示当前每个键是否被按下,数组每个元素对应一个键的状态。 举个例子来说,假设数组的第一个元素表示A键的状态,那么当A键被按下时,这个元素的值就为True,否则为False。对于不同的键,对应的数组元素下标和名称不同,详细的对应关系可以查看Pygame官方文档。 在实际开发,我们可以使用这个函数来检测用户是否按下了某个键,进而在游戏逻辑做出相应的处理。比如说,我们可以写一个事件循环,每次循环时调用这个函数,在检测到按下某个键时,执行相应的操作,比如控制角色移动方向。这种实现方式相比于每次按下键盘时触发一次事件处理函数,效率更高,且能够处理连续按键的情况。 需要注意的是,这个函数只能够检测当前时刻是否有键被按下,并不能检测按键次数、按键顺序等信息。此外,这个函数只能够在主循环被调用,而不能够在事件处理函数直接使用,否则会出现不可预期的结果。 综上所述,pygame.key.get_pressed()在Pygame游戏开发具有重要的作用,特别是对于控制角色移动、键盘快捷键等功能的实现。但是,需要开发者注意函数的使用方式以及局限性,避免出现不必要的问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值