【问题标题】:Repeated key detection in PyGame ZeroPyGame Zero 中的重复键检测
【发布时间】:2019-12-26 03:27:33
【问题描述】:

我的 pgzero 按键事件处理程序确实只识别一次按下的按键(直到释放),但如果按键被按住,则不支持重复按键事件。

我怎样才能做到这一点?

PS:由于pgzero 是使用pygame 实现的,也许pygame 解决方案可以工作...

import pgzrun

counter = 1

def on_key_down(key):
    global counter
    if key == keys.SPACE:
        print("Space key pressed...")
        counter = counter + 1

def draw():
    screen.clear()
    screen.draw.text("Space key pressed counter: " + str(counter), (10, 10))

pgzrun.go()

【问题讨论】:

  • 如果你一直按下它就不能重复——系统没有这个事件。您只能在 on_key_down 中设置一些 True 值并在 on_key_up 中设置 False 并使用计时器检查该值是否仍然为 True 并将其计为重复。
  • 您也可以使用keyboard[keys.SPACE]
  • @furas 谢谢,这确实更直观地工作(无需额外的按键变量)

标签: python pgzero


【解决方案1】:

该事件仅在按键被按下时触发一次。您必须使用状态变量space_pressed,它在按键被按下时声明(在on_key_down() 中)并在按键被释放时重置(在on_key_up() 中)。增加update()中的计数器,取决于变量space_pressed的状态:

import pgzrun

counter = 1
space_pressed = False

def on_key_down(key):
    global space_pressed
    if key == keys.SPACE:
        print("Space key pressed...")
        space_pressed = True

def on_key_up(key):
    global space_pressed
    if key == keys.SPACE:
        print("Space key released...")
        space_pressed = False

def update():
    global counter
    if space_pressed:
        counter = counter + 1

def draw():
    screen.clear()
    screen.draw.text("Space key pressed counter: " + str(counter), (10, 10))

pgzrun.go()

【讨论】:

  • 完美!我什至可以通过使用我自己的基于计时器的游戏滴答功能来控制重复率(update 被称为每秒 60 次 AFAIK,这对我来说太快了)
【解决方案2】:

受@furas 评论的启发,我 [found->] 实现了一个不需要使用全局变量来管理关键状态的进一步解决方案:

import pgzrun

counter = 1

# game tick rate is 60 times per second
def update():
    global counter    
    if keyboard[keys.SPACE]:  # query the current "key pressed" state
        counter = counter + 1

def draw():
    screen.clear()
    screen.draw.text("Space key pressed counter: " + str(counter), (10, 10))

pgzrun.go()

【讨论】:

    猜你喜欢
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2012-10-21
    相关资源
    最近更新 更多