Verknüpfung mehrerer Tastendrücke in Turtle Graphics
Bei der Spieleentwicklung erfordert die Koordinierung von Benutzereingaben zuverlässige Tastenbindungstechniken. In diesem Artikel geht es darum, wie man mehrere Tastendrücke in Schildkrötengrafiken miteinander verknüpft und so komplexe Aktionen ermöglicht, wenn bestimmte Kombinationen gedrückt werden.
Problemstellung:
Erstellen Sie eine Verbindung-die- Punkt-Python-Spiel, bei dem:
Erster Ansatz:
Der folgende Code stellt einen ersten Versuch dar:
import turtle flynn = turtle.Turtle() win = turtle.Screen() win.bgcolor("LightBlue") flynn.pensize(7) flynn.pencolor("lightBlue") win.listen() def Up(): flynn.setheading(90) flynn.forward(25) def Down(): flynn.setheading(270) flynn.forward(20) def Left(): flynn.setheading(180) flynn.forward(20) def Right(): flynn.setheading(0) flynn.forward(20) def upright(): flynn.setheading(45) flynn.forward(20) win.onkey(Up, "Up") win.onkey(Down,"Down") win.onkey(Left,"Left") win.onkey(Right,"Right")
Herausforderungen:
Der obige Code registriert nicht mehrere gleichzeitige Tastendrücke. Wenn Sie beispielsweise nach oben und rechts drücken, wird die Aktion nur für die zweite gedrückte Taste ausgeführt.
Alternative Lösung:
Aufgrund der Einschränkungen von onkeypress() eine Alternative Herangehensweise ist erforderlich. Bei dieser Lösung werden Tastendrücke in einer Liste aufgezeichnet, und ein Timer prüft regelmäßig, ob registrierte Kombinationen vorliegen und führt die entsprechenden Aktionen aus.
from turtle import Turtle, Screen win = Screen() flynn = Turtle('turtle') def process_events(): events = tuple(sorted(key_events)) if events and events in key_event_handlers: (key_event_handlers[events])() key_events.clear() win.ontimer(process_events, 200) def Up(): key_events.add('UP') def Down(): key_events.add('DOWN') def Left(): key_events.add('LEFT') def Right(): key_events.add('RIGHT') def move_up(): flynn.setheading(90) flynn.forward(25) def move_down(): flynn.setheading(270) flynn.forward(20) def move_left(): flynn.setheading(180) flynn.forward(20) def move_right(): flynn.setheading(0) flynn.forward(20) def move_up_right(): flynn.setheading(45) flynn.forward(20) def move_down_right(): flynn.setheading(-45) flynn.forward(20) def move_up_left(): flynn.setheading(135) flynn.forward(20) def move_down_left(): flynn.setheading(225) flynn.forward(20) key_event_handlers = { \ ('UP',): move_up, \ ('DOWN',): move_down, \ ('LEFT',): move_left, \ ('RIGHT',): move_right, \ ('RIGHT', 'UP'): move_up_right, \ ('DOWN', 'RIGHT'): move_down_right, \ ('LEFT', 'UP'): move_up_left, \ ('DOWN', 'LEFT'): move_down_left, \ } key_events = set() win.onkey(Up, "Up") win.onkey(Down, "Down") win.onkey(Left, "Left") win.onkey(Right, "Right") win.listen() process_events() win.mainloop()
Diese Lösung geht das Problem effektiv an und ermöglicht die gleichzeitige Registrierung mehrerer Tastendrücke .
Das obige ist der detaillierte Inhalt vonWie binde ich mehrere Tastendrücke in Turtle Graphics für komplexe Aktionen zusammen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!