【问题标题】:pygame KEYDOWN event and key eventspygame KEYDOWN事件和关键事件
【发布时间】:2016-06-06 05:08:48
【问题描述】:

您好,有一个问题在使用 pygame 开发游戏时并不重要,但一直困扰着我一段时间。

    while not gameExit:
        for event in pygame.event.get():e
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_RIGHT:
                    pass

所以上面是一个工作代码,我相信

    while not gameExit:
        for event in pygame.event.get():e
            if event.type == pygame.KEYDOWN and event.key == pygame.K_RIGHT:
                pass

同样有效。

但是,当我尝试“event.key == pygame.K_RIGHT:”之类的东西时,python 给我一个错误,说没有属性“key”。 虽然我知道选择以上 2 个代码而不是“event.key == pygame.K_RIGHT:”会更合理,但我不知道为什么 pygame 会说事件没有属性“key”而当我只是检查 event.type == pygame.KEYDOWN pygame 执行“event.key == pygame.K_RIGHT”是否没有问题。

会不会是检查 event.type == pygame.KEYDOWN 是否真的为事件生成了一个 'key' 属性?

【问题讨论】:

    标签: python pygame keydown


    【解决方案1】:

    并非每个事件都具有所有可能的属性。这就是为什么您必须首先检查事件的类型。

    Here's 每种事件类型的所有属性列表:

    QUIT             none
    ACTIVEEVENT      gain, state
    KEYDOWN          unicode, key, mod
    KEYUP            key, mod
    MOUSEMOTION      pos, rel, buttons
    MOUSEBUTTONUP    pos, button
    MOUSEBUTTONDOWN  pos, button
    JOYAXISMOTION    joy, axis, value
    JOYBALLMOTION    joy, ball, rel
    JOYHATMOTION     joy, hat, value
    JOYBUTTONUP      joy, button
    JOYBUTTONDOWN    joy, button
    VIDEORESIZE      size, w, h
    VIDEOEXPOSE      none
    USEREVENT        code
    

    如您所见,只有KEYDOWNKEYUP 事件具有key 属性。

    【讨论】:

    • 是的,但是如果我按下一个键,无论我问python是否是一个keydown事件,这不是一个keydown事件吗?(它不应该有KEY属性吗?)
    • 是的,如果你按下一个键,你会得到一个KEYDOWN 事件。但是,如果您遍历从 pygame.event.get() 返回的所有事件,您还将获得除 KEYDOWN 以外的事件(例如 MOUSEMOTION),而后者又没有 KEY 属性。当然,您也可以调用pygame.event.get(pygame.KEYDOWN) 只获取KEYDOWN 事件,因此不必检查类型(但之后您仍然必须调用pygame.event.get(),这样事件队列就不会满了) .
    猜你喜欢
    • 1970-01-01
    • 2018-03-17
    • 1970-01-01
    • 1970-01-01
    • 2010-12-11
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 1970-01-01
    相关资源
    最近更新 更多