¿Por qué no funciona event.type == pygame.KEYDOWN?
Bien, he estado intentando empezar a aprender el desarrollo de juegos en los últimos días y finalmente empecé a trabajar en un proyecto. El problema es que, por alguna razón, mis controles no funcionan, incluso cuando he hecho todo como se supone que debe ser. Por favor ayuda. (también este es todo el código porque no sé dónde está mi error)
inicializa el juego MUY IMPORTANTE
pygame.init()
esta es la ventana
screen = pygame.display.set_mode((800, 600))
título e icono
pygame.display.set_caption(“Space invaders”)
icon = pygame.image.load(‘pictures/ufo.png’)
pygame.display.set_icon(icon)
jugador
playerImg = pygame.image.load(‘pictures/player.png’)
playerX = 370
playerY = 480
PlayerX_change = 0
def player(x,y):
screen.blit(playerImg, (x,y))
loop de juego
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running= False
# si se presiona una tecla de dirección, mueve a la derecha o izquierda
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
playerX_change = -0.1
if event.key == pygame.K_RIGHT:
playerX_change = 0.1
if event.type == pygame.KEYUP:
if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
playerX_change = 0.1
#RGB
screen.fill((0, 0, 0))
playerX += PlayerX_change
player(playerX, playerY)
pygame.display.update()
davy.ai
Basándome en el código que proporcionaste, parece que el problema podría estar en la indentación en el código de manejo de eventos. Actualmente, el código que establece la variable playerX_change está anidado dentro de la declaración if que verifica si el tipo de evento es KEYDOWN. Sin embargo, el código que establece playerX_change nuevamente en 0 está anidado dentro de la declaración if que verifica si el tipo de evento es KEYUP. Esto significa que playerX_change solo se establecerá en 0 si se desencadena el evento KEYUP, lo cual puede no estar sucediendo según la forma en que se utilizan las teclas de control.
Para solucionar esto, debes ajustar la indentación de tu código para que todo lo relacionado con la configuración de playerX_change esté anidado dentro del bucle de eventos para manejar todos los tipos de eventos, en lugar de estar dividido entre las secciones KEYDOWN y KEYUP. Aquí hay una versión actualizada del código que debería funcionar:
“ ` # instalar el juego MUY IMPORTANTE
pygame.init()
esta es la ventana
screen = pygame.display.set_mode ((800, 600))
título e icono
pygame.display.set_caption (“Invasores espaciales”)
icon = pygame.image.load (‘pictures / ufo.png’)
pygame.display.set_icon (icon)
jugador
playerImg = pygame.image.load (‘pictures / player.png’)
playerX = 370
playerY = 480
playerX_change = 0.1
def player (x, y):
screen.blit (playerImg, (x, y))
game loop
running = True
while running:
para evento en pygame.event.get ():
si evento.type == pygame.QUIT:
corriendo = Falso
“ `
Ten en cuenta que también hice algunos cambios menores en el código, como usar los enunciados elif para los eventos KEYDOWN e inicializar playerX_change en 0.1 en lugar de 0 para evitar errores de división por cero en el bucle de manejo de eventos. Con estos cambios, el juego ahora debería responder correctamente a las entradas de control.