Jumat, 10 Desember 2010

Dasar Pemrograman DirectInput

Pada aplikasi game, hal terpenting adalah menerima masukan dari perangkat input seperti keyboard, mouse atau joystick. Tanpa itu, sebagus apapun grafis dan suara aplikasi game, anda Cuma akan menonton animasi yang alurnya sudah ditentukan layaknya menonton film.
Sebelum beranjak pada diskusi pemrograman, mari kita tinjau jenis perangkat input yang tersedia pada PC.

Jenis Perangkat Input
Untuk game PC, perangkat input yang dibutuhkan pada umunya beragam, tergantung pada jenis game yang dimainkan. Game real-time strategy umumnya menggunakan kombinasi keyboard dan mouse. Game side scrolling cocok dengan perangkat gamepad. Game simulasi penerbangan cocok dengan tipe joystick, sedangkan game balap mobil lebih nyaman menggunakan perangkat steering wheel.

Mengapa DirectInput Diciptakan?
DirectInput, salah satu komponen direct, adalah interface pemrograman untuk perangkat input seperti keyboard, mouse, dan joystick.
Pada pengembangan aplikasi game era operating system DOS, memprogram perangkat input sangat merepotkan terutama joystick, karena perbedaan cara akses perangkat keras joystick oleh masing-masing produsen. Pengembangan game harus mendukung sebanyak mungkin perangkat tipe perangkat keras agar software mereka diterima luas.
System input yang disediakan oleh operating system, umumnya dirancang agar memudahkan pengguna mengetikkan sesuatu melalui keyboard, mengklik tombol, dan menggerakkan kursor petunjuk menggunakan mouse. Coba amati waktu jeda ketika sebuah tombol keyboard ditekan kali pertama sampai dianggap sebagai pengulangan penekanan tombol. Tanpa jeda waktu tersebut, pengguna akan kesulitan mengetik teks dengan benar. Alih-alih mengetik teks “saya menulis”, yang tercetak dilayar justru mungkin “ssssssaaaayyyyaaa mmmeeennuuulllliiiissss”.
Tapi di aplikasi game, jeda waktu ini biasanya tidak di sukai, terutama ketika perangkat input digunakan untuk mengontrol pergerakkan karakter game. Ketika tombol panah atas ditekan dan ditahan untuk menggerakkan karakter pemain maju, saat itu juga, pemain harus ditampilkan bergerak maju selama tombol ditahan, tak ada jeda sedikitpun.
Problem lain adalah deteksi penekanan tombol kombinasi. System input Windows hanya melaporkan penekanan tombol kombinasi CTRL, ALT, atau SHIFT dengan tombol-tombol lain. Anda tidak dapat mendeteksi kombinasi penekanan tombol, misalnya A dan W secara bersamaan. Windows hanya melaporkan tombol yang pertama ditekan. Aplikasi game, terutama game bertipe pertarungan, menggunakan tombol-tombol kombinasi untuk memerintahkan karakter dalam game melakukan aksi tertentu.
DirectInput diciptakan sebagai solusi bagi masalah-masalah di atas. Directinput menyediakan interface pemrograman yang konsisten untuk mengakses perangkat input yang beragam yang mungkin tidak didukung oleh WindowsAPI. Beban pengembang game lebih ringan sehingga lebih focus ke pemrograman game daripada pusing dengan pemrograman low-level perangkat input. DirectInput juga disediakan untuk menutupi kelemahan system input Windows yang tidak cocok untuk pemrograman game real-time, walau demukian, Directinput tidak menyediakan manfaat lebih bagi aplikasi yang menggunakan keyboard untuk entri teks atau mouse untuk navigasi.

Arsitektur DirectInput

Directinput Dan Sistem Windows
DirectInput melompati sistem input pada Windows dan mengakses hardware melalui lapisan tipis yang disebut Hardware Abstraction Layer (HAL). Agar interface pemrograman konsisten, DirectInput mengharuskan produsen perangkat keras mengimplementasikan HAL. Dengan HAL, DirectInput tidak perlu tahu detil bagai mana suatu tugas diimplementasikan ke dalam perangkat keras. Jika anda menemukan suatu perangkat input mendukung DirectX, hal ini berarti produsennya telah mengimplementasikan HAL.

Komponen DirectInput
DirectInput terdiri atas objek DirectInput (IDirectInput8), objek DirectInput device (IDirectInput8) dan objek efek (IDirectInputEffect8). IDirectInput8 adalah objek utama yang harus diciptakan untuk memanfaatkan system DirectInput. Objek ini diperlukan untuk menciptakan instance objek device seperti keyboard, mouse, dan joystick.
Instance objek device dipergunakan untuk mengatur konfigurasi perangkat keras input, mendapatkan kemampuan input, dan membaca data dari perangkat input. Objek device juga dipergunakan untuk menciptakan objek efek yang digunakan untuk memanfaatkan fitur force-feedback pada perangkat input. Fitur force-feedback, yaitu fitur yang memungkinkan perangkat input menghasilkan respon gaya.

Tombol Dan Sumbu (Axis)
Di DirectInput, istilah tombol mengacu pada saklar yang memiliki posisi on/off. Tidak ada perbedaan, apakah itu tombol keyboard, tombol kiri/kanan mouse atau tombol pada joystick, bahkan pijakan kaki pada game Dance Dance Revolution TM buatan Konami, termasuk kategori tombol.
Sumbu (axis) memiliki jangkauan posisi, di mana nilainya dipengaruhi pergerakan fisik perangkat input pada arah tertentu. Seperti halnya tombol axis tidak harus memilii representasi fisik tertentu. Mouse dan joystick adalah perangkat yang mewakili dua sumbu. Perangkat roda pada mouse scroll juga tergolong perangkat sumbu.

Penggerakan Axis Relatif Dan Absolut
Beberapa perangkat input hanya melaporkan pergerakan axis relative terhadap posisi terakhir terutama pada perangkat input yang memiliki axis yang dapat bergerak tak terbatas, seperti mouse.
Beberapa perangkat input lain menggunakan pergerakan absolute, karena secara fisik, pergerakan terbatas. Sumbu joystick hanya bisa bergerak dalam jangkauan tertentu. Oleh karena itu, biasanya posisi yang dilaporkan adalah posisi absolute terhadap suatu posisi referensi.

Software Yang Diperlukan
Untuk memulai pemrograman DirectInput dengan Delphi, anda perlu beberapa software. Saya masih menggunakan compiler Turbo Delphi 2006 edisi Explorer yang dapat anda peroleh gratis di http://www.turboexplorer.com/delphi. Anda juga butuh unit konversi header DirectX 9 yang ditulis oleh Alexey Barkovoy (http://www.clootie.ru). Anda bisa menggunakan compiler Delphi versi lain tanpa banyak mengalami perubahan. Pada DirectX 9, DirectInput tidak banyak mengalami perubahan, sehingga interface yang dipergunakan masih sama dengan DirectX 8.

Tidak ada komentar:

Posting Komentar