Sign in to follow this  

unrecognized event.key

This topic is 1731 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

hi

 

i had written a program where i want to add xbox 360 controller support.

 

my program crashed when it said 'object Event has no attribute "key"'.  

 

 

            
        for event in pygame.event.get(): # event handling loop
            if event.type == QUIT:
                terminate()
            elif event.type == KEYDOWN or event.type == JOYAXISMOTION:                                     # by removing event.type == JOYAXISMOTION 
                                                                                                                                                        # the program run fine (ran without run time error).
                if (axis_x < 0.0 or event.key == K_LEFT or event.key == K_a) and direction != RIGHT:  # **** program crashed here. ****
                    direction = LEFT
                    print ' going L'
                elif (axis_x > 0. or event.key == K_RIGHT or event.key == K_d) and direction != LEFT:
                    print ' going R'
                    direction = RIGHT
 
it seen that pygame did not recognize event.key when i had the second event checked (the or statement).  is there a way to check both the KEYDOWN and JOYAXISMOTION in a single if statement?  because otherwise, i would have to handle it in a separate block of codes. and it could be logically unsound. imagine if some user uses both keyboard and joystick at the same time!
 
thanks
Edited by nickme

Share this post


Link to post
Share on other sites

I would put the JOYAXISMOTION in another elif block after the KEYDOWN block so the keyboard supercedes the joystick. Then each block sets a var and then I would check the state of the var at the end of the event block.

Edited by tp9

Share this post


Link to post
Share on other sites

Forget what I said earlier. I don't think you can even process 2 events at the same time unless you pull them out of the queue explicitly. For example.

for event in pygame.event.get([KEYDOWN, JOYAXISMOTION]):
    #do something

 

Therefore you won't have a collision. Here is the test I ran to verify the behavior. Move your mouse around the display box and hit Escape at the same time.

import pygame, sys
from pygame.locals import *

def main():
    pygame.init()
    DISPLAYSURF = pygame.display.set_mode((400,300))
    pygame.display.set_caption('Hello world')
    i = 0
    while True:
        for event in pygame.event.get():
            i += 1
            # print "In event loop", event.type
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            if event.type == MOUSEMOTION:
                print 'mouse moved', i
                mouseX, mouseY = event.pos
            if event.type == KEYDOWN:
                print "Key pressed", i
                if event.key == K_ESCAPE:
                    pygame.quit()
                    sys.exit()
                
        pygame.display.update()

if __name__=='__main__':
    main()

Share this post


Link to post
Share on other sites

This topic is 1731 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this