Input Mouse dan Keyboard di Gosu

Game, menurut definisi, interaktif. Gosu membuat interaksi ini secara langsung dengan antarmuka sederhana untuk mendeteksi dan bereaksi terhadap penekanan tombol dan tombol mouse.

Ada dua cara utama untuk menangani input dalam program Anda. Yang pertama adalah pendekatan yang berorientasi pada peristiwa. Ketika tombol ditekan, program Anda menerima suatu peristiwa dan Anda dapat bereaksi sesuai itu. Yang kedua adalah untuk memeriksa apakah, pada saat pembaruan, tombol tertentu ditekan. Kedua teknik ini benar-benar valid, gunakan yang mana yang paling cocok untuk Anda.

Di belakang layar, tombol diwakili oleh bilangan bulat. Kode integer ini bergantung pada platform dan mungkin seharusnya tidak menemukan jalan mereka ke dalam kode game Anda. Untuk abstrak ini, Gosu menyediakan sejumlah konstanta untuk digunakan.

Untuk setiap tombol keyboard, ada a Gosu:: Kb * konstan. Untuk sebagian besar tombol, nama-nama konstanta ini mudah ditebak. Misalnya, tombol panah Gosu:: KbLeft, Gosu:: KbRight, Gosu:: KbUp dan Gosu:: KbDown. Untuk daftar lengkap, lihat dokumentasi untuk modul Gosu.

instagram viewer

Acara masukan dikirimkan ke Gosu:: Window contoh. Di loop utama, sebelumnya memperbarui disebut, Gosu akan mengirimkan acara untuk semua tombol yang telah ditekan atau dirilis. Ini melakukan ini dengan memanggil button_down dan button_up metode, melewati id tombol atau tombol ditekan.

Dalam button_down dan button_up metode, Anda sering menemukan kasus pernyataan. Ini, selain sangat berfungsi, menyediakan cara yang sangat elegan dan ekspresif untuk memutuskan apa yang harus dilakukan tergantung pada tombol mana yang ditekan atau dilepaskan. Berikut ini adalah contoh singkat dari apa a button_down Metode dapat terlihat seperti. Itu harus ditempatkan di Anda Gosu:: Window subclass, dan akan menutup jendela (mengakhiri program) ketika melarikan diri tombol ditekan.

Mudah kan? Mari kembangkan ini. Ini dia Pemain kelas. Itu dapat bergerak ke kiri dan ke kanan jika tombol kiri dan kanan ditekan. Perhatikan bahwa kelas ini juga memiliki button_down dan button_up metode. Mereka bekerja seperti metode dari a Gosu:: Window subkelas. Gosu tidak tahu apa-apa tentang itu Pemain Namun, kami akan memanggil Pemainmetode secara manual dari Gosu:: Windowmetode. Contoh lengkap, dapat dijalankan dapat ditemukan sini.

Jika input berbasis acara bukan gaya Anda, Anda dapat menanyakannya Gosu:: Window untuk melihat apakah ada tombol atau tombol yang ditekan, kapan saja. Anda dapat mengabaikan button_down dan button_up panggilan balik seluruhnya.

Untuk menanyakan Gosu:: Window untuk melihat apakah tombol ditekan, panggil button_down? metode dengan id tombol yang ingin Anda periksa. Jangan lupa tanda tanya dalam panggilan ini! Jika Anda menelepon button_down (Gosu:: KbLeft)kamu akan pelaporan sebuah tombol tekan untuk Gosu:: Window subkelas. Bahkan jika Anda tidak memiliki metode panggilan balik yang ditentukan, kelas induknya, Gosu:: Window akan. Tidak akan ada kesalahan, itu tidak akan berfungsi seperti yang Anda harapkan. Jangan lupa tanda tanya itu!

Ini dia Pemain kelas ditulis ulang untuk digunakan button_down? bukannya acara. Contoh lengkap, dapat dijalankan tersedia sini. Kali ini, input diperiksa pada awal memperbarui metode. Anda juga akan melihat bahwa contoh ini lebih pendek tetapi, menurut saya, kurang elegan.

Tombol mouse ditangani dengan cara yang sama seperti tombol keyboard dan gamepad. Anda dapat meminta keduanya button_down? dan acara dengan button_down dan button_up. Namun, gerakan mouse hanya dapat ditanyakan, tidak ada acara untuk pergerakan mouse. Gosu:: Windowini mouse_x dan mouse_y metode menyediakan koordinat X dan Y dari pointer mouse.

Perhatikan bahwa koordinat X dan Y relatif terhadap jendela game. Jadi, misalnya, jika mouse berada di sudut kiri atas, ia akan berada di dekat koordinat (0,0). Juga, jika pointer mouse di luar dari jendela game sepenuhnya, itu masih akan melaporkan di mana pointer relatif ke jendela. Jadi keduanya mouse_x dan mouse_y bisa kurang dari nol dan lebih dari lebar atau tinggi jendela.

Program berikut akan menampilkan sprite baru di mana pun Anda mengklik mouse. Perhatikan bahwa ia menggunakan input yang digerakkan oleh peristiwa (untuk klik), dan input yang digerakkan oleh permintaan (untuk mendapatkan posisi mouse). File lengkap, dapat dijalankan tersedia sini.

instagram story viewer