首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何延迟pygame.key.get_pressed()?

如何延迟pygame.key.get_pressed()?
EN

Stack Overflow用户
提问于 2014-02-07 14:01:58
回答 1查看 1.7K关注 0票数 0

我还没有找到一个直接的答案。

key.set_repeat()适用于KEYDOWN事件,但不适用于key.get_pressed()

代码语言:javascript
复制
import sys, pygame
from pygame.locals import *

pygame.init()
Clock = pygame.time.Clock()
pygame.display.set_mode((200, 100))

pygame.key.set_repeat(1, 500)

while True:

    if pygame.key.get_pressed()[K_UP]:
        print('up!')

    for event in pygame.event.get():

        if event.type == QUIT:
            pygame.quit()
            sys.exit()

        elif event.type == KEYDOWN:
            if event.key == K_DOWN:
                print('down!')

    Clock.tick(30)

即使是最轻微的向上敲击,至少也会爆炸成几个向上的,只有向下的才会延迟。我想使用key.get_pressed(),因为它可以方便地处理多个输入。我必须要用一些山梨滴答计数器来解决这个问题吗?或者,是否有一种方法来处理多个KEYDOWN事件?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-07 14:19:23

如果没有必要的话,就不要和key.set_repeat()混在一起了。

只需使用key.get_pressed()检查按下的键以及按下该键的位置对您有意义,例如,在按K_LEFT时向左移动。

当您在单键按下时使用event.get() / KEYDOWN,例如,按K_P之类的东西会暂停游戏。

如果您处理key.set_repeat(),例如将延迟设置为低,您将无法识别单个键笔画,因为每一个键笔画都会创建多个KEYDOWN事件。

要处理多个KEYDOWN事件,只需检查相关事件。每一次关键的笔画都会产生一个KEYDOWN事件,所以您可以简单地检查,例如:

代码语言:javascript
复制
for event in pygame.event.get():
    if event.type == KEYDOWN:
        if event.key == K_DOWN:
            print('down!')
        elif event.key == K_UP:
            print('up!')

当然,如果用户一直按下键,这将多次打印up!/down!

金科玉律是:如果您在单个键的KEYDOWNKEYUP事件中被插入,最好使用key.get_pressed()

即使是最轻微的向上敲击,至少也会爆炸到几个向上的,只有向下的才会延迟。

这是因为事件系统和key.get_pressed()完全不同。如果在多个帧上按下K_UP,则会打印每个帧的'up!',因为每个帧中都按下了键。key.get_pressed()简单返回在调用此函数时按下的键。换句话说:你不能“拖延”它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21629727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档