If I want to move a sprite based on key input in pygame, is there anyway to write code so if I hold down a key, the sprite will keep moving in that direction until I release
You normally use have a moving function in your update method that looks like this:
this.pos_x = direction * speed * delta
Now on your KEYDOWN events you set your direction to 1 or -1 and on KEYUP you set it back to 0. That way you have a nice constant movement.
The OP wants keystate polling, not KEYDOWN
events.
This example shows using both key events, and key polling. You use one for 'on key press' and the other for 'while held down'.
import pygame
from pygame.locals import *
done = False
player.pos = Rect(0,0,10,10)
while not done:
for event in pygame.event.get():
# any other key event input
if event.type == QUIT:
done = True
elif event.type == KEYDOWN:
if event.key == K_ESC:
done = True
# get key current state
keys = pygame.key.get_pressed()
if keys[K_LEFT]:
player.pos.left -= 10
if keys[K_RIGHT]:
player.pos.left += 10
if keys[K_UP]:
player.pos.top -= 10
if keys[K_DOWN]:
player.pos.left += 10
if keys[K_SPACE]:
print 'firing gun'
As an overview,
KEYDOWN
event in the pygame message queue.KEYUP
event that matches your key.Read the documentation as to how to implement this.