Apa cara paling umum menangani klik mouse di game?
Mengingat semua yang Anda miliki dengan cara mendeteksi input dari mouse adalah apakah sebuah tombol naik atau turun.
Saat ini saya hanya mengandalkan mouse sebagai klik, tetapi pendekatan sederhana ini sangat membatasi saya dalam apa yang ingin saya capai. Misalnya saya memiliki beberapa kode yang hanya boleh dijalankan sekali pada klik mouse, tetapi menggunakan mouse ke bawah sebagai klik mouse dapat menyebabkan kode untuk menjalankan lebih dari sekali tergantung pada berapa lama tombol ditekan untuk. Jadi saya harus melakukannya dengan sekali klik!
Tapi apa cara terbaik untuk menangani klik? Adalah klik ketika mouse bergerak dari mouse ke atas atau dari bawah ke atas atau apakah itu klik jika tombolnya kurang dari x frame / milidetik dan kemudian jika demikian, apakah itu dianggap mouse ke bawah dan klik jika itu ke bawah untuk frame x / milidetik atau klik lalu tetikus ke bawah?
Saya bisa melihat bahwa masing-masing pendekatan dapat memiliki kegunaannya tetapi yang mana yang paling umum dalam game? Dan mungkin saya akan bertanya lebih spesifik mana yang paling umum di game RTS?
Jawaban:
Anda berada di jalur yang benar dengan mencari tahu kapan mouse beralih dari bawah ke atas dan menulis pawang untuk itu. Untuk banyak gim, cukup baik memperlakukan acara mouseUp sebagai klik.
Bergantung pada gim Anda, Anda mungkin ingin menangani kedua acara - misalnya, dalam RTS, Anda mungkin ingin memasukkan pemilihan kotak seret serta pemilihan satu klik. Perbedaannya adalah dalam menentukan berapa lama mouse dalam kondisi Down sebelum dirilis.
(Ya, pada dasarnya Anda menjawab pertanyaan Anda sendiri)
sumber
Tidak ada yang 'terbaik' - Anda membutuhkan semuanya.
Jika saya menembakkan senjata, saya tidak ingin menunggu mouse dilepaskan untuk memicu efek tembakan senjata. Dan jika Anda menyeret sebuah kotak di sekitar sekelompok unit, Anda memulai aksi seret pada mouse-down.
Di sisi lain, jika saya mengklik item GUI maka saya ingin menunggu klik penuh karena itulah yang biasa saya lakukan.
Jadi, Anda mungkin harus menerapkan mouse ke bawah, mouse ke atas, tarik mouse (mouse ke atas di tempat yang berbeda secara signifikan ke mouse ke bawah) dan dan klik mouse (mouse ke atas di tempat yang sama dengan mouse ke bawah), dan menghubungkan mereka ke bagian-bagian permainan Anda sebagai Anda mau.
sumber
Cara sebagian besar sistem windowing menanganinya, serta gim yang telah saya kerjakan (dan sebagian harus saya implementasikan sendiri) adalah memiliki sedikit pada setiap tombol yang mendeteksi jika mouse memasuki keadaan mouse di atas tombol yang diberikan. Ini hanya mengatur bingkai bahwa mouse turun dan hanya dibersihkan ketika tombol mouse dilepaskan. Jika dan hanya jika mouse dilepaskan di atas tombol dan bit diatur, kemudian jalankan acara yang diklik tombol.
(Anda mungkin juga menginginkan bendera yang diset true ketika bit diatur dan mouse melayang di atas tombol Anda, sehingga Anda dapat mengubah tombol untuk menggunakan tekstur yang ditekan alih-alih yang normal.)
Ini adalah skema dasar di balik sebagian besar tombol. Silakan dan temukan prompt dialog. Tekan tombol batal tapi jangan lepaskan. Tombol menjadi tertekan saat mouse berada di atasnya, dan kembali normal jika mouse Anda berhenti melayang di atasnya, tetapi akan kembali ditekan jika Anda bergerak kembali. Itu hanya menjalankan aksinya jika Anda melepaskan dan Anda mengatasinya. Jangan gunakan hitungan milidetik, itu sebagian besar hanya untuk mendeteksi klik ganda dalam ambang Anda.
(dan jika Anda benar-benar ingin berkhayal, ada acara yang dapat Anda hubungkan ke masing-masing transisi tersebut. mis. MouseOver saat masuk, dan saat keluar, MouseDown masuk / keluar, masuk / keluar MouseUp, masuk / keluar MouseClicked masuk / keluar, dll. )
sumber
Tombol mouse dan tombol keyboard dapat memiliki sejumlah acara yang berbeda, apa yang tersedia tergantung pada pilihan bahasa / pustaka Anda, yang paling umum:
Kunci ke bawah, terpicu ketika tombol ditekan.
Mengunci, memicu ketika tombol dilepaskan.
Tombol terbelakang, terpicu ketika tombol ditekan, dan kemudian dinyalakan berulang kali pada beberapa interval tergantung sistem hingga kunci dilepaskan.
Selain itu, mungkin ada panggilan untuk memberi tahu apakah kunci sedang ditekan atau tidak.
Penting bagi Anda untuk mengetahui dengan tepat alat apa yang Anda gunakan, paling umum Anda akan membutuhkan keduanya terlebih dahulu, jika tidak tersedia, buatlah dari apa pun yang tersedia.
Metode standar untuk mendaftar bahwa tombol di layar ditekan menggunakan mouse adalah untuk menyatakan bahwa tombol yang sama diarahkan pada acara turun dan naik. Namun bagi banyak elemen gim ini mungkin terlalu lambat, jadi untuk banyak aksi mungkin bijaksana untuk mewujudkannya di acara turun.
sumber
XOr dapat menjadi teman Anda dalam situasi ini.
Ini akan memanggil sendMouseClickEvent () setiap kali kondisi tombol mouse berubah dari false menjadi true.
sumber
if (!oldIsButtonUp && isButtonUp) {
.Versi XNA dari kode ini akan seperti (disederhanakan hanya untuk mendeteksi peristiwa mouse down, untuk mendeteksi klik dua kali Anda akan membutuhkan sesuatu yang lebih canggih);
sumber