Pygame Spieler bewegen?

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet
Was muss ich tun, damit ich die Tasten gedrückt halten kann und das Quadrat sich durchgehend bewegt?

Schwer zu sagen, ohne deinen Code zu sehen - wobei ich auch keine Ahnung von Pygame habe. Aber im Grunde brauchst du so ein Konstrukt:

def moveForward:
	while True:
		pressed = pygame.key.get_pressed()
		if pressed[pygame.K_w]:
			#Hier dein Code zum Vorwärts bewegen
		else:
			break

Lässt sich eventuell verkürzen zu:

def moveForward:
	while pygame.key.get_pressed()[pygame.K_w]:
		#Hier dein Code zum Vorwärts bewegen

Musst du mal ausprobieren.

Ansonsten guck mal hier:

https://stackoverflow.com/questions/25494726/how-to-use-pygame-keydown-to-execute-something-every-time-through-a-loop-while-t


Brotbuechse 
Fragesteller
 05.03.2022, 12:13

Mit while Schleifen hatte ich es auch schon ausprobiert, aber da hängt sich das Programm dann auf. Aber ich probiers mal.

Mein Code sieht so aus:

while game_running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            game_running = False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                y = y - 4
            if event.key == pygame.K_s:
                y = y + 4
            if event.key == pygame.K_a:
                x = x - 4
            if event.key == pygame.K_d:
                x = x + 4
            if event.key == pygame.K_e:
                height = height + 4
                width = width + 4
            if event.key == pygame.K_q:
                height = height - 4
                width = width - 4
0
GuteAntwort2021  05.03.2022, 12:20
@Brotbuechse

Naja, das event wird vermutlich ja nur einmalig aufgerufen, entsprechend wird es nur einmalig bewegt.

Wenn es sich mit einer While-Schleife aufhängt, dann würde ich mal gucken, ob ich nicht einen Timer einrichte, der dann alle 100 ms fragt, ob die Taste noch gedrückt ist und dann erneut die Bewegung ausführt.

1
Brotbuechse 
Fragesteller
 05.03.2022, 13:09
@GuteAntwort2021

Deine Lösung war richtig. Mich hat nur die Definition verwirrt.

pressed = pygame.key.get_pressed()
if pressed[pygame.K_w]:
    y = y - 4

Hiermit funktioniert es jetzt.

0