Maus- und Tastatureingabe in Gosu

click fraud protection

Spiele sind per Definition interaktiv. Gosu macht diese Interaktion mit einer einfachen Oberfläche zum Erkennen und Reagieren auf Drücken von Tasten und Maustasten unkompliziert.

Es gibt zwei Hauptmethoden, um Eingaben in Ihr Programm zu verarbeiten. Der erste ist ein ereignisorientierter Ansatz. Wenn Tasten gedrückt werden, erhalten Ihre Programme ein Ereignis und Sie können entsprechend reagieren. Die zweite besteht darin, zu überprüfen, ob zum Zeitpunkt eines Updates eine bestimmte Taste gedrückt wird. Beide Techniken sind absolut gültig. Verwenden Sie diejenige, die am besten zu Ihnen passt.

Hinter den Kulissen werden Schaltflächen durch Ganzzahlen dargestellt. Diese ganzzahligen Codes sind plattformabhängig und sollten wahrscheinlich nicht in Ihren Spielcode gelangen. Um dies zu abstrahieren, stellt Gosu eine Reihe von Konstanten zur Verfügung, die verwendet werden können.

Für jede Tastaturtaste gibt es eine Gosu:: Kb * Konstante. Für die meisten Schlüssel sind die Namen dieser Konstanten leicht zu erraten. Zum Beispiel sind die Pfeiltasten

instagram viewer
Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp und Gosu:: KbDown. Eine vollständige Liste finden Sie in der Dokumentation für das Gosu-Modul.

Eingabeereignisse werden an die geliefert Gosu:: Fenster Beispiel. In der Hauptschleife vorher aktualisieren wird aufgerufen, Gosu liefert Ereignisse für alle Tasten, die entweder gedrückt oder losgelassen wurden. Dies geschieht durch Aufrufen der button_down und button_up Methoden, Übergabe der ID der Taste oder Taste gedrückt.

In dem button_down und button_up Methoden finden Sie oft eine Fall Erklärung. Dies ist nicht nur sehr funktional, sondern bietet auch eine sehr elegante und ausdrucksstarke Möglichkeit, zu entscheiden, was zu tun ist, je nachdem, welche Taste gedrückt oder losgelassen wurde. Das Folgende ist ein kurzes Beispiel dafür, was a button_down Methode kann so aussehen. Es sollte in Ihrem platziert werden Gosu:: Fenster Unterklasse und schließt das Fenster (Beenden des Programms), wenn die Flucht Taste wird gedrückt.

Einfach richtig? Lassen Sie uns dies erweitern. Hier ist ein Spieler Klasse. Es kann sich nach links und rechts bewegen, wenn die linke und rechte Taste gedrückt werden. Beachten Sie, dass diese Klasse auch hat button_down und button_up Methoden. Sie funktionieren genauso wie die Methoden von a Gosu:: Fenster Unterklasse. Gosu weiß nichts darüber Spieler aber wir werden die anrufen SpielerMethoden manuell aus dem Gosu:: FensterMethoden. Ein vollständiges, ausführbares Beispiel finden Sie Hier.

Wenn ereignisbasierte Eingaben nicht Ihr Stil sind, können Sie beliebige abfragen Gosu:: Fenster um jederzeit zu sehen, ob eine Taste oder Taste gedrückt wird. Sie können das ignorieren button_down und button_up Rückrufe ganz.

Um die abzufragen Gosu:: Fenster Um zu sehen, ob eine Taste gedrückt wird, rufen Sie die button_down? Methode mit der ID der Schaltfläche, die Sie überprüfen möchten. Vergessen Sie nicht das Fragezeichen in diesem Aufruf! Wenn Sie anrufen button_down (Gosu:: KbLeft), Du wirst sein Berichterstattung ein Knopfdruck auf die Gosu:: Fenster Unterklasse. Auch wenn Sie keine Rückrufmethoden definiert haben, kann die übergeordnete Klasse Gosu:: Fenster werden. Es wird kein Fehler auftreten, es funktioniert einfach nicht wie erwartet. Vergiss das Fragezeichen einfach nicht!

Hier ist das Spieler Klasse neu geschrieben, um zu verwenden button_down? anstelle von Ereignissen. Ein vollständiges, ausführbares Beispiel ist verfügbar Hier. Dieses Mal wird die Eingabe zu Beginn des aktualisieren Methode. Sie werden auch feststellen, dass dieses Beispiel kürzer, aber meiner Meinung nach weniger elegant ist.

Die Maustasten werden wie Tastatur- und Gamepad-Tasten behandelt. Sie können beide mit abfragen button_down? und Veranstaltungen mit button_down und button_up. Die Mausbewegung kann jedoch nur abgefragt werden, es gibt keine Ereignisse für die Mausbewegung. Gosu:: Fenster's mouse_x und mouse_y Methoden liefern die X- und Y-Koordinaten des Mauszeigers.

Beachten Sie, dass die X- und Y-Koordinaten relativ zum Spielfenster sind. Befindet sich die Maus beispielsweise in der oberen linken Ecke, befindet sie sich in der Nähe der Koordinate (0,0). Auch wenn der Mauszeiger ist draußen Im gesamten Spielfenster wird weiterhin angezeigt, wo sich der Zeiger relativ zum Fenster befindet. Also beides mouse_x und mouse_y kann kleiner als Null und größer als die Breite oder Höhe des Fensters sein.

Das folgende Programm zeigt überall dort, wo Sie mit der Maus klicken, ein neues Sprite an. Beachten Sie, dass sowohl ereignisgesteuerte Eingaben (für die Klicks) als auch abfragegesteuerte Eingaben (zum Abrufen der Mausposition) verwendet werden. Eine vollständige, ausführbare Datei ist verfügbar Hier.

instagram story viewer