Game komputer adalah loop tanpa akhir dari:
- Pembaruan: Tingkatkan keadaan permainan satu irisan waktu kecil (seperti 1/80 detik).
- Cat kondisi permainan saat ini.
Ada variasi dari ini. Beberapa gim memiliki lebih banyak pembaruan di antara masing-masing cat, atau dapat memvariasikannya untuk membuat gim mengalir sama rata pada mesin yang berbeda. Tapi itu detail teknis.
Fase pembaruan yang terjadi antara 50 dan 100 kali setiap detik (ya itu yang sering) lakukan ini:
- Perbarui fisika game. Katakanlah bahwa seorang aktor memiliki kecepatan. Pembaruan harus memindahkannya sedikit ke arah yang benar. Juga, jika Anda menggunakan mesin fisika, itu harus memeriksa tabrakan dengan akting atau hambatan lain.
- Perbarui aturan permainan. Inilah yang membuatnya menjadi permainan dan bukan eksperimen fisika. Katakanlah bahwa peluru mengenai aktor pemain. Aturan permainan memberi tahu pemain untuk mengurangi poin X kesehatan dan peluru untuk menghilang.
- Pembaruan AI. Terkadang aktor yang dikendalikan komputer harus memutuskan apa yang harus dilakukan. Ke kiri atau kanan? Temukan jalan menuju tempat yang menyenangkan. Tembakan senjata.
- Kontrol input. Perbarui aktor pemain sesuai tombol yang ditekan pada keyboard.
- Perbarui grafik adegan. Ini dapat meningkatkan satu langkah animasi, atau memperbarui GUI untuk menunjukkan bahwa pemain sekarang memiliki 10 poin lebih sedikit kesehatan. Satu-satunya tujuan adalah membuat permainan terlihat dan terasa menyenangkan.
Di mana Anda mulai?
Persyaratan dasar untuk gim grafis adalah memprogram grafik. Pastikan Anda dapat membuka jendela, dan menggambar bola di dalamnya.
Saya menganggap Anda dapat membuat semacam kelas. Buat kelas Ball. Itu memiliki anggota berikut: x, y, deltaX, deltaY. Semua bilangan bulat dan dalam skala piksel. Sekarang, tulis loop ini.
forever, do this {
start measure time (in milliseconds)
//physics part
add deltaX to x
add deltaY to y
if x is bigger than the screen width, assign -deltaX to deltaX
if y is bigger than the screen height, assign -deltaY to deltaY
if x is less than 0, assign -deltaX to deltaX
if y is less than 0, assign -deltaY to deltaY
//paint
paint the ball at x, y
stop measuring time, assign this to workTime
make the thread sleep for (25 - workTime) milliseconds
}
Ini akan membuat bola memantul dari batas jendela. Ini bukan permainan , melainkan simulasi fisik. Jika Anda menulis pembaruan fisika bola di dalam kelas bola, mudah untuk menambahkan beberapa bola. Simpan dalam daftar dan perbarui dan cat masing-masing untuk setiap frame.
Anda dapat menambahkan dayung (mensimulasikan fisika untuknya dan membuatnya dapat dikontrol dengan mouse atau keyboard) dan tujuan permainan seperti menghentikan bola mencapai dinding kiri. Jika permainan menambahkan semakin banyak bola dari waktu ke waktu, kesulitannya akan meningkat. Anda memiliki permainan.
Mengapa tidur selama (25 - workTime) milidetik? Jika Anda melakukannya seperti ini, simulasi akan berjalan dengan kecepatan 40 pembaruan dan cat per detik. Ini akan cukup lancar. Jika Anda melewatkan bagian tidur, animasinya akan tersentak-sentak, dan menghabiskan CPU 100%. Juga, kecepatan bola akan tergantung pada kecepatan mesin yang menjalankannya. Sekarang, kecepatan vertikal bola adalah 40 * deltaY piksel per detik.
Yang perlu Anda pahami adalah matriks. Mereka mendukung permainan. Setelah Anda memahami kekuatan matriks, Anda akan melihat bagaimana gim dikurangi menjadi matematika sederhana.
Anda mengambil posisi titik di ruang permainan. Anda memproyeksikannya menggunakan matriks ke layar (temukan koordinat layarnya). Anda menginterpolasi beberapa piksel antara itu dan itu simpul tetangga, dan Anda selesai. Itu jelas penyederhanaan yang sangat besar, tetapi dasar-dasar rasterisasi sama sekali tidak rumit begitu Anda menemukan matriks.
sumber