Reputation: 1
So I need to eventually create a game for one of my classes and I want to use pygame. So I was trying to follow a tutorial and pygame is not recognizing keyboard input. The game loads with no errors, but m character doesn't move. Any help? My code:
#Import
import pygame
from pygame.locals import*
#initialization
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))
#keys
keys = [False, False, False, False]
playerpos=[100,100]
#images
player = pygame.image.load("resources/images/dude.png")
grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")
#loop
while 1:
#clear screen
screen.fill(0)
#screen elements
for x in range(width/grass.get_width()+1):
for y in range(height/grass.get_height()+1):
screen.blit(grass,(x*100,y*100))
screen.blit(castle,(0,30))
screen.blit(castle,(0,135))
screen.blit(castle,(0,240))
screen.blit(castle,(0,345))
screen.blit(player,playerpos)
#update screen
pygame.display.flip()
#loop events
for event in pygame.event.get():
#check if event is the X button
if event.type==pygame.QUIT:
#key_input
if event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
if event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False
elif event.key==pygame.K_a:
keys[1]=False
elif event.key==pygame.K_s:
keys[2]=False
elif event.key==pygame.K_d:
keys[3]=False
#if it quits
pygame.quit()
exit(0)
#9-Move player
if keys[0]:
playerpos[1]-=5
elif keys[2]:
playerpos[1]+=5
if keys[1]:
playerpos[0]-=5
elif keys[3]:
playerpos[0]+=5
Again, the character loaded doesn't move when I press wasd. Any help would be much appreciated as I am trying to learn more about game dev (:
Upvotes: 0
Views: 173
Reputation: 627
You are checking the event.type for keypresses inside the if-statement where you check
if event.type == pygame.QUIT
Meaning, that your program only checks key-presses after you try to quit the program.
Move all if statements where you check key actions one tab to the left and it should work.
However, you are going to have to move the code to be executed when quitting right beneath
if event.type == pygame.QUIT
like so:
if event.type==pygame.QUIT:
#if it quits
pygame.quit()
exit(0)
#key_input
elif event.type == pygame.KEYDOWN:
if event.key==K_w:
keys[0]=True
elif event.key==K_a:
keys[1]=True
elif event.key==K_s:
keys[2]=True
elif event.key==K_d:
keys[3]=True
elif event.type == pygame.KEYUP:
if event.key==pygame.K_w:
keys[0]=False
elif event.key==pygame.K_a:
keys[1]=False
elif event.key==pygame.K_s:
keys[2]=False
elif event.key==pygame.K_d:
keys[3]=False
To improve performance, use elif-statements to check the event.type instead of if-statements, since event.type can't be pygame.QUIT, pygame.KEYDOWN and pygame.KEYUP.
Upvotes: 1