pygame - on-hold-Taste nach unten
Ich habe eine Lösung gefunden, um ein sprite zu bewegen, wenn Sie eine Taste gedrückt halten nach unten. Das problem ist, dass es zwingt schreiben ugly duplizierten code. Die aktuelle Lösung, die ich fand ist:
for event in pygame.event.get():
if event.type == KEYDOWN:
keystate = pygame.key.get_pressed()
while keystate[K_RIGHT]:
screen.fill((255,255,255))
pygame.event.get()
for sprite in sprites:
rimage = sprite[1].getimage()
if sprite[2] is None:
x+=3
sprite[1].update(time)
screen.blit(rimage, (x,y))
if sprite[1].isfinished() == True:
sprite[1].reset()
last_dir = "right"
if x >= screen_width - rimage.get_width():
x = screen_width - rimage.get_width()
#update player sprite movement
#update player sprite animation
#update rest of game map
keystate = pygame.key.get_pressed()
time = pygame.time.get_ticks()
pygame.display.update()
Das problem ist, dass die while keystate-block. Es muss wiederholt werden, für jede Richtung und die Spielwelt aktualisiert werden muss in jedem while-block. Fünf Orte, an denen der gleiche code muss dupliziert werden....4 Richtungen plus, wenn eine Taste nicht gedrückt. Ich konnte wickeln Sie es in eine Funktion, aber ich Frage mich, ob es einen besseren Weg zu behandeln, das gedrückt halten einer Taste in der pygame.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den üblichen Weg-Programm in pygame ist, verwenden Sie die Ereignisse, die zum aktualisieren der Richtung, dann schreiben Sie das update-position code außerhalb der Veranstaltungen, so dass Sie nicht brauchen, repliziert code.
Wenn Sie möchten, können Sie das gleiche zu erreichen mit keystate, in einem solchen Fall brauchen Sie nicht, um Prozess wichtigen Ereignisse.
Pygame suggeriert oder impliziert die Aufteilung von Programmen in 3 Teile:
Dem event-handling, Aktualisierung und Zeichnung.
Als pmoleri schon sagte, Sie ändern Sie einfach die Richtung der Bewegung.
In der update-Funktion nutzen, sollten Sie eine delta-Zeit-parameter, um alle bewegen Sie die sprites nach der Zeit übergeben. Es ist sehr wichtig, da die andere Technik nicht berücksichtigt, die variable Geschwindigkeit des Prozessors. Spiele in DOS wurden auf diese Weise gemacht, so, jetzt müssen wir Emulatoren, künstlich verlangsamen den Prozessor. Der Verlosung Teil zieht einfach alle sprites.
Diese Weise haben Sie eine klare Trennung zwischen diesen 3 distinc Teile in spielen: Spieler-Eingang, Spiel-Logik(Bewegung, Kollision, Aktionen etc.) und Zeichnung.
Darüber hinaus
pygame.key.get_pressed()
verwendet werden kann.Diese gibt eine Liste aller Schlüssel, die derzeit nach unten gezogen wird.
Diese nicht brauchen, um im event-Bereich, aber wohl, wo die player-updates.
Dadurch kann der code weniger klobig und (mögliche) effizienter
-Hoffe, dass ich geholfen!