run online example python python-2.7 pygame

python - online - ¿Cómo puedo hacer que mi objeto en pygame se mueva manteniendo presionado el botón?



pygame python 3 (3)

Intenta agregar las teclas de tu pygame para el bucle. Entonces debería verse algo como esto ...

while running: for event in pygame.event.get(): keys = pygame.key.get_pressed() #checking pressed keys if keys[pygame.K_UP]: y1 -= 1 if keys[pygame.K_DOWN]: y1 += 1

Intenté usar algo como esto pero no funcionó.

while running: keys = pygame.key.get_pressed() #checking pressed keys if keys[pygame.K_UP]: y1 -= 1 if keys[pygame.K_DOWN]: y1 += 1

Aquí está el código que tengo en este momento. Intenté usar un método diferente porque el método anterior no funcionó para mí. Lo mueve un toque a la vez.

import pygame spaceX = 100 spaceY = 100 pygame.init black = (0,0,0) size = (800, 800) screen = pygame.display.set_mode(size) def game(spaceX, spaceY): spaceship_file = ''spaceship.png'' spaceship_image = pygame.image.load(spaceship_file) spaceship = pygame.transform.scale(spaceship_image, (30, 30)) screen.fill(black) screen.blit(spaceship, (spaceX, spaceY)) pygame.display.flip() while True: for event2 in pygame.event.get(): if event2.type == pygame.KEYDOWN and event2.key == pygame.K_LEFT: spaceX2 = spaceX - 5 game(spaceX2, spaceY) elif event2.type == pygame.KEYDOWN and event2.key == pygame.K_RIGHT: spaceX2 = spaceX + 5 game(spaceX2, spaceY) game(spaceX, spaceY)

EDITAR:

Tengo este código ahora. Mi objeto solo se mueve cuando toco el botón varias veces y no cuando lo mantengo presionado.

def game(spaceX, spaceY): while True: screen.fill(black) screen.blit(spaceship, (spaceX, spaceY)) pygame.display.flip() keys = pygame.key.get_pressed() for event in pygame.event.get(): if keys[pygame.K_LEFT]: spaceX = spaceX - 5 game(spaceX, spaceY) elif keys[pygame.K_RIGHT]: spaceX = spaceX + 5 game(spaceX, spaceY)


Una solución a este problema sería usar la función set_repeat

pygame.key.set_repeat(True)

Esto generará múltiples eventos KEYDOWN .


Hay dos formas de verificar la entrada de la clave, ya sea si están en la cola de eventos o verificando su estado actual.

Cola de eventos

Las teclas se colocan en la cola de eventos cuando se presionan o realimentan, por lo que no se puede decir directamente si se mantiene o no una tecla. Hay dos formas de evitar esto:

  1. Llame a pygame.key.set_repeat(True) antes de ingresar al ciclo principal. Esto colocará repetidamente el evento KEYDOWN en la cola de eventos, siempre que se mantenga.

  2. Introduzca una variable de velocidad. Establezca la velocidad a cierta velocidad cuando el usuario presione la tecla, y configure la velocidad a 0 cuando el usuario levante la tecla.

Por ejemplo:

for event in pygame.event.get(): if event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: velocity_x = -5 elif event.key == pygame.K_RIGHT: velocity_x = 5 elif event.type == pygame.KEYUP: if event.key == pygame.K_LEFT: velocity_x = 0 elif event.key == pygame.K_RIGHT: velocity_x = 0 position_x += velocity_x

Comprobación del estado

Obtiene el estado actual de las teclas al llamar a pygame.key.get_pressed() . Debes llamar a una de las funciones en pygame.event para que pygame pueda realizar algunas acciones internas requeridas, por lo tanto, usa pygame.event.pump() si no quieres usar la cola de eventos. Su sistema operativo pensará que pygame se ha bloqueado si no lo hace, lo que hace que el juego no responda. Aunque, por lo general, desea controlar el evento pygame.QUIT para que el usuario pueda salir.

pygame.event.pump() keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: position_x -= 5 elif keys[pygame.K_RIGHT]: position_x += 5