Jadi anggap Anda memiliki sistem input yang didasarkan pada polling
void update()
{
if( Keyboard[ 'A' ] )
// A is down
}
Katakanlah Anda ingin dapat mengenali 3 hingga 8 kombinasi tombol panjang (seperti turun, turun-maju, maju, A untuk hado-ken)
Bagaimana cara terbaik Anda membuat sistem input kombinasi tombol generik (mudah dimodifikasi / diprogram) pada input yang disurvei ?
Salah satu caranya adalah menyimpan status input saat ini dan sebelumnya, dan membandingkannya setiap kali Anda polling input.
Untuk setiap tombol yang dapat ditekan, simpan objek yang memiliki stempel waktu terakhir kali bahwa tombol tersebut beralih dari keadaan turun ke keadaan naik.
Perbarui objek-objek ini dengan melakukan ini di setiap jajak pendapat:
Sekarang Anda dapat mencocokkan pola kombo Anda dengan konten
keys
.Memiliki objek kombo untuk setiap kombo, dan panggilan pembaruan () pada setiap objek kombo di setiap jajak pendapat.
Metode pembaruan objek kombo () akan berpola sesuai dengan kombo, memeriksa apakah semua kondisi yang diperlukan untuk kombo puas pada jajak pendapat ini. Yaitu semua cap waktu tombol untuk kombo sejauh ini dalam urutan, dan tidak ada tombol lain yang akan merusak kombo telah menekan bingkai ini. Untuk setiap kondisi yang dipenuhi, tambahkan penghitung di objek kombo ke kondisi berikutnya untuk diperiksa. Ketika semua kondisi dipenuhi dalam sebuah kombo, panggil metode yang kombo harus lakukan. Jika
some_key_has_been_pressed == true
tetapi tombol yang merupakan kondisi berikutnya untuk kombo belum ditekan, maka setel ulang penghitung kondisi puas kombo ke 0.Di atas adalah metode yang saya sukai, karena mudah diimplementasikan, mudah dipelihara, efisien, dan sangat modular.
Namun untuk metode lain yang bagus, periksa sampel urutan input XNA , yang ditulis dalam C #, dan logikanya kemungkinan ditransfer ke bahasa yang Anda gunakan.
sumber
if(current_input[key].down){
,, tidakkah Anda juga ingin memeriksa apakah kunci diprevious_input
negara bagian? Seperti yang tertulis, saya pikir itu akan terus memperbarui kunci yang ditahandown_timestamp
.Buat tumpukan peristiwa kunci X terakhir, untuk setiap peristiwa kunci tambahkan objek dengan tombol dan waktu pers / lepaskan, lalu periksa apakah anggota terakhir tumpukan cocok dengan pola khusus dan jika tombol itu cukup cepat ditekan untuk dihitung sebagai kombinasi. Akhirnya, hapus objek tertua dari tumpukan.
sumber