Difference between revisions of "Keyboard input"

From TRCCompSci - AQA Computer Science
Jump to: navigation, search
 
Line 14: Line 14:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
If these variables are used to draw something to the screen, then the object will move around the screen.
+
If these variables are used to draw something to the screen, then the object will move around the screen. The benefit of using this method is that if the player continues to hold a key the key will continue to be registered by get_pressed(). However the next method relies on events, and the event will only register on KEYDOWN (press) or KEYUP (release) you will need to have extra logic to determine if it is been held.
  
The alternative way of doing this is within the pygame.events:
+
The alternative way of handling input is within the pygame.events:
  
 
<syntaxhighlight lang=python>
 
<syntaxhighlight lang=python>
Line 32: Line 32:
 
             elif event.key == pygame.K_DOWN:
 
             elif event.key == pygame.K_DOWN:
 
                 Y=Y+1
 
                 Y=Y+1
 +
</syntaxhighlight>
 +
 +
However to allow the player to continue to hold a key you will need to create some boolean variables and set these on KEYDOWN or KEYUP:
 +
 +
<syntaxhighlight lang=python>
 +
 +
LEFTHELD = False
 +
RIGHTHELD = False
 +
 +
while True:
 +
    for event in pygame.event.get():
 +
        if event.type == pygame.QUIT:
 +
            pygame.quit(); #sys.exit() if sys is imported
 +
        elif event.type == pygame.KEYDOWN:
 +
            if event.key == pygame.K_LEFT:
 +
                LEFTHELD = True
 +
            elif event.key == pygame.K_RIGHT:
 +
                RIGHTHELD = True
 +
        elif event.type == pygame.KEYUP:
 +
            if event.key == pygame.K_LEFT:
 +
                LEFTHELD = False
 +
            elif event.key == pygame.K_RIGHT:
 +
                RIGHTHELD = True
 +
 +
    if LEFTHELD:
 +
        X = X - 1
 +
    if RIGHTHELD:
 +
        X = X + 1
 
</syntaxhighlight>
 
</syntaxhighlight>

Latest revision as of 07:27, 6 July 2018

Within the game loop of your code, we can firstly get the status of the keyboard and store it in a variable called user_input. We can then check this for certain keys:

user_input = pygame.key.get_pressed()
    
if(user_input[pygame.K_UP]):
    Y=Y-1
elif(user_input[pygame.K_DOWN]):
    Y=Y+1
if(user_input[pygame.K_LEFT]):
    X=X-1
elif(user_input[pygame.K_RIGHT]):
    X=X+1

If these variables are used to draw something to the screen, then the object will move around the screen. The benefit of using this method is that if the player continues to hold a key the key will continue to be registered by get_pressed(). However the next method relies on events, and the event will only register on KEYDOWN (press) or KEYUP (release) you will need to have extra logic to determine if it is been held.

The alternative way of handling input is within the pygame.events:

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); #sys.exit() if sys is imported
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                X+X-1
            elif event.key == pygame.K_RIGHT:
                X=X+1
            if event.key == pygame.K_UP:
                Y=Y-1
            elif event.key == pygame.K_DOWN:
                Y=Y+1

However to allow the player to continue to hold a key you will need to create some boolean variables and set these on KEYDOWN or KEYUP:

LEFTHELD = False
RIGHTHELD = False

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit(); #sys.exit() if sys is imported
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                LEFTHELD = True
            elif event.key == pygame.K_RIGHT:
                RIGHTHELD = True
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                LEFTHELD = False
            elif event.key == pygame.K_RIGHT:
                RIGHTHELD = True

     if LEFTHELD:
         X = X - 1
     if RIGHTHELD:
         X = X + 1