2013-06-24 10 views
17

Also, vor einer Weile, fing ich an, mich kivy zu unterrichten. Ich begann mit der Main-Kivy-Website und ging durch sein Pong-Tutorial, und nachdem ich fertig war, entschied ich mich, es zu versuchen und ihm eine Schlüsseleingabe zu geben. Ich kann einfach nicht finden, irgendeine Art von Anleitung zur Schlüsseleingabe mit Kivy! Wer kennt eine Art Tutorial oder kann leicht verständlichen Code bereitstellen? Ich habe mir den Tastatur-Listener im Beispiel-Ordner von kivy angeschaut, aber ich bin mir nicht sicher, wie ich das verwenden soll, wenn ich es sollte.Wie überprüfen Sie mit kivy auf Tastaturereignisse?

Vielen Dank für Ihre Hilfe.

Antwort

21

Ich vermute, Sie fragen, wie Sie die Paddles mit der Tastatur steuern können. Ich nehme an, Sie haben die letzten Ping-Pong-Codes auf Ihrem Computer ausgeführt (wenn nicht, können Sie sie am Ende der this section finden).

1 - In der main.py der Window-Klasse-Import:

from kivy.core.window import Window 

2 - den Beginn der PongGame Klasse neu definieren, so dass es wie folgt aussieht:

class PongGame(Widget): 
    ball = ObjectProperty(None) 
    player1 = ObjectProperty(None) 
    player2 = ObjectProperty(None) 

    def __init__(self, **kwargs): 
     super(PongGame, self).__init__(**kwargs) 
     self._keyboard = Window.request_keyboard(self._keyboard_closed, self) 
     self._keyboard.bind(on_key_down=self._on_keyboard_down) 

    def _keyboard_closed(self): 
     self._keyboard.unbind(on_key_down=self._on_keyboard_down) 
     self._keyboard = None 

    def _on_keyboard_down(self, keyboard, keycode, text, modifiers): 
     if keycode[1] == 'w': 
      self.player1.center_y += 10 
     elif keycode[1] == 's': 
      self.player1.center_y -= 10 
     elif keycode[1] == 'up': 
      self.player2.center_y += 10 
     elif keycode[1] == 'down': 
      self.player2.center_y -= 10 
     return True 

Voilà! Drücken Sie w und s für das linke Paddel und up und down für das rechte Paddel.

+0

Ah, das scheint vorläufig zu funktionieren, aber was würde ich tun, wenn ich wollte, dass jede Klasse ihre eigene Schlüsselüberprüfung hat? Würde ich nur die Funktion _on_keyboard_down in jeder Klasse verwenden müssen? Oder müsste ich die Tastatur mehrmals initialisieren? – Alex

+0

@Alex, das ist eine andere Frage. Fühlen Sie sich frei, eine neue Frage zu stellen, anstatt die Kommentare zu verwenden. –

+8

Sie müssten _keyboard.bind() in allen Widgets verwenden, die sie benötigen. – Tshirtman