es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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()

Tags:  ,

Answer

  1. Avatar for 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

        # si se presiona la tecla de movimiento a la derecha o la izquierda
        si evento.type == pygame.KEYDOWN:
            si evento.key == pygame.K_LEFT:
                playerX_change = -0.1
            elif event.key == pygame.K_RIGHT:
                playerX_change = 0.1
        elif event.type == pygame.KEYUP:
            si evento.key == pygame.K_LEFT o evento.key == pygame.K_RIGHT:
                playerX_change = 0.0
    
    # RGB
    screen.fill ((0, 0, 0))
    playerX + = playerX_change
    jugador (playerX, playerY)
    pygame.display.update ()
    

    “ `

    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.

Comments are closed.