Ich erstelle ein sehr einfaches Spiel mit der Pygame-Bibliothek, in der der Spieler mit den Pfeiltasten ein Quadrat um den Bildschirm bewegt. Leider erweist sich die Reaktion der Kontrollen als Problem.Optimierung der Tastatureingabe in Pygame
Die Kontrollen funktionieren gut, bis Sie Richtung z. links nach rechts. Wenn der Spieler die Richtung wechselt, hält der Spieler die Gläser zum Stillstand.
Der Code für die Kontrollen wie dies in meinem Spiel aussieht:
def move(self, event):
speed = 6
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
self.rect.x -= speed
if event.key == pygame.K_RIGHT:
self.rect.x += speed
if event.key == pygame.K_DOWN:
self.rect.y += speed
if event.key == pygame.K_UP:
self.rect.y -= speed
Diese Methode in einer Klasse befindet genannt-Block (Ich habe Block von der pygame docs), die für den Spieler einen Sprit neben macht einfach Bereitstellung von Bewegung.
while going:
clock.tick(60)
# event handling
for event in pygame.event.get():
if event.type == QUIT:
going = False
# controller input
player.move(event)
Wo Spieler ist eine Instanz der Block-Klasse und Event ist nur ein Element aus der Ereigniswarteschlange meines Spiels:
Die Funktion move() wird tatsächlich in der main.py Datei wie folgt aufgerufen .
Ich versuchte mit der pygame.key.get_pressed -Funktion (die funktioniert besser), aber ich würde lieber die Ortsnamen pygame.KEYDOWN alternativ, weil es die Taste drücken als Ereignisse in der Ereigniswarteschlange zurückgegeben, anstatt Booleans von einer Liste zurückgegeben .
Wenn Sie mehr investigative als ein durchschnittlicher joe sind, können Sie einen Blick auf das „voll“ Spiel nehmen hier: https://github.com/catmes/Project_React
Sie werden 2.7 pygame 1.9.2 und Python benötigen. Denken Sie daran, dass das Spiel selbst eher eine Lernübung ist, also wundern Sie sich nicht, wenn Sie schlechten Code sehen (der später natürlich behoben wird;)).
Vielen Dank für Ihren Besuch und geben Sie dieser Frage einen Blick, ich schätze Ihre Zeit.
Das funktioniert wunderbar! Ich danke dir sehr. Ich wurde versucht, den Zustand der Schlüssel zu halten, die freigegeben wurden, um zu sehen, ob das die Kontrollen optimieren würde, aber nichts in dem Maße, wie Sie es getan haben. Prost! – kitofkat
Ich war eigentlich neugierig, wie Sie Ihre __init__ Funktion in der Player-Klasse definiert haben; Gibt es einen bestimmten Grund, warum Sie super() zu inhärent verwenden, wenn Sie zuvor eine __init__ Funktion in der Player-Klasse definiert haben? – kitofkat
Ich verstehe deine Frage nicht ganz. Ich habe 'super (Player, self) .__ init __() 'benutzt, um die * superclass *' pygame.sprite.Sprite' zu initialisieren. Dazu ist es nicht notwendig, aber es ist eine gute Übung, alle sichtbaren Klassen zu einer Unterklasse der Sprite-Klasse zu machen, sodass Sie Ihre Spielobjekte zu "pygame.sprite.Group" hinzufügen und einige nützliche Methoden nutzen können. (http://www.pygame.org/docs/ref/sprite.html#pygame.sprite.Group) –