pygame KEYDOWN event and key events

2019-08-09 11:38发布

问题:

Hi there is an issue that doesn't really matter when developing a game with pygame but that kept on bothering me for a while.

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

so above is a working code and I believe

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

works as well.

However, when I just try something like "event.key == pygame.K_RIGHT:", python gives me an error saying there is no attribute 'key'. While I know it'd be more reasonable to choose above 2 codes over just "event.key == pygame.K_RIGHT:", I don't know why pygame would say the event doesn't have the attribute 'key' while when I simply check if event.type == pygame.KEYDOWN pygame will have no problem executing "event.key == pygame.K_RIGHT".

Could it be that checking if event.type == pygame.KEYDOWN actually generates a 'key' attribute for the event?

回答1:

Not every event has all possbile attributes. that's why you have to check the type of the event first.

Here's a list of all attributes for each event type:

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

As you can see, only KEYDOWN and KEYUP events have the key attribute.