Menyelaraskan input pengguna daripada berbilang tekanan kekunci adalah penting dalam banyak aplikasi interaktif, termasuk permainan. Dalam grafik Penyu, menyambungkan titik berdasarkan kombinasi kekunci tertentu adalah keperluan biasa.
Untuk mengendalikan berbilang penekanan kekunci secara bersama-sama, pendekatan berikut telah digunakan secara meluas:
Kaedah win.onkeypress() dalam Turtle menyediakan cara yang mudah untuk mengikat acara penekan kekunci kepada fungsi tertentu. Dengan mendaftarkan pendengar acara untuk setiap kekunci individu, kami boleh melaksanakan tindakan yang diingini apabila kekunci yang sepadan ditekan.
Sebagai contoh, pertimbangkan senario di mana kami mahu Penyu kami bergerak ke arah yang berbeza berdasarkan gabungan kekunci. Kami boleh mendaftarkan pendengar acara untuk kekunci 'Atas,' 'Bawah,' 'Kiri' dan 'Kanan' serta menentukan fungsi berasingan untuk mengendalikan setiap pergerakan.
<code class="python">import turtle flynn = turtle.Turtle() win = turtle.Screen() 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) win.onkeypress(Up, "Up") win.onkeypress(Down, "Down") win.onkeypress(Left, "Left") win.onkeypress(Right, "Right")</code>
Dengan kod ini, apabila pengguna menekan kekunci 'Naik', Penyu akan bergerak 25 unit ke arah utara. Begitu juga, Penyu akan bertindak balas terhadap tekanan kekunci 'Bawah,' 'Kiri' dan 'Kanan'.
Penyelesaian di atas merangkumi peristiwa penekanan kekunci tunggal, tetapi untuk mengendalikan kombinasi, seperti kekunci 'Atas' dan 'Kanan' yang ditekan bersama, kita perlu menggunakan pendekatan yang lebih maju.
Menggunakan kaedah win.onkeypress() secara eksklusif untuk acara gabungan boleh membawa kepada isu masa dan ketidakkonsistenan. Sebaliknya, kami boleh menggunakan mekanisme pemasa untuk menyemak secara berkala untuk kemunculan sebarang kombinasi tekan kekunci.
<code class="python">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()</code>
Pendekatan ini mengekalkan senarai peristiwa utama dalam set_peristiwa kunci dan setiap kali fungsi pemasa dilaksanakan , ia menyemak sama ada terdapat sebarang kombinasi dalam kamus key_event_handlers. Jika gabungan ditemui, fungsi pengendali yang sepadan akan dilaksanakan, menyebabkan Penyu melakukan tindakan yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mengikat Berbilang Acara Akhbar Utama dalam Grafik Penyu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!