Pemrograman game: metode umum dan pola desain [ditutup]

9

Saya mulai menulis mesin gim yang sangat sederhana sehingga saya bisa belajar OpenGL 3.x lebih baik tetapi karena pengalaman saya dan pengetahuan saya yang jarang tentang bagaimana game 3D harus dirancang, saya biasanya mendapatkan masalah di mana saya menyadari bahwa saya seharusnya merancang kelas saya. berbeda. Masalah lain yang saya hadapi adalah bagaimana melacak waktu secara singkat dalam permainan dan memperbarui gerakan sesuai kebutuhan dan bagaimana memberi tahu pemberi render bahwa itu perlu digambar ulang. Juga saya tetap perlu membuat fungsi Get and Set untuk melewatkan berbagai flag dari satu objek ke objek lain, apakah itu praktik yang buruk?

Jadi, seperti judulnya, saya tertarik pada buku atau artikel / tutorial dan sumber yang dapat membantu saya dan akan menjelaskan beberapa pola desain umum dalam desain game (yaitu penangan keadaan game, font dll).

Btw, saya masih menggunakan freeglut, apakah Anda akan merekomendasikan saya pindah ke sistem windowing yang lebih baik sebelum maju atau setelah saya mendapatkan pemahaman yang lebih baik tentang OpenGL?

Grieverheart
sumber
12
Standar "Saya sedang menulis mesin" respons = Menulis Game, Bukan Mesin. Mesin adalah lubang kelinci yang dalam untuk jatuh ke dalamnya. Penelitian apa yang telah Anda lakukan sejauh ini? Di sini Anda akan mendapatkan hasil terbaik dengan memilih satu masalah, fokus dan mencari pertanyaan masa lalu. Terus mencari masalah baru saat mereka muncul saat menulis game Anda, satu per satu. Sebagai catatan tambahan, menyadari bahwa kelas perlu didesain ulang adalah hal biasa dan proses melakukan hal itu disebut "refactoring," artinya Anda belajar sambil jalan dan itu hal yang baik.
Patrick Hughes
1
Terimakasih atas tanggapan Anda. Maaf jika saya tidak jelas, saya tidak benar-benar ingin membangun mesin permainan penuh tetapi saya ingin belajar beberapa pola desain dasar yang digunakan dalam desain game sehingga saya merancang kelas saya dengan lebih baik. Saya kira harus ada beberapa solusi umum untuk masalah umum. Semakin dalam saya masuk ke dalam desain, semakin banyak masalah yang muncul dan semakin sulit untuk menemukan jawaban. Penelitian saya sejauh ini belum terlalu berhasil, tutorial yang bagus yang saya temukan yang masuk lebih dalam ke dalam pembuatan game adalah codeproject.com/Articles/27219/… .
Grieverheart
1
Begitu ya, memasukkan "metode umum mesin gim" dalam judul cenderung mengarahkan diskusi ke ... mesin =) Bagaimanapun, alasan Anda merasa sulit untuk mendapatkan apa yang Anda cari adalah karena ada banyak berbagai jenis permainan karena ada tahun dalam kalender Maya dan masing-masing jenis memiliki kebutuhan sendiri. Anda mungkin memiliki hasil yang lebih baik jika Anda mencari jenis permainan tertentu, penembak orang pertama sangat umum, untuk memberikan daya tarik pada mesin pencari.
Patrick Hughes
Gaya FPS atau roaming gratis akan menjadi apa yang saya cari. Intinya saya ingin menciptakan dunia di mana saya bisa bereksperimen dengan berbagai teknik grafis dan animasi. Saya sudah memiliki kamera dasar dan gerakan seperti melompat dan memberondong dan pemuatan model tetapi rasanya kurang pas misalnya saya meletakkan animasi berjalan di dalam kelas kamera dan saya menggunakan variabel internal untuk menghitung frame. Saya kebanyakan menambal lubang dan tidak menghasilkan sesuatu yang kuat. Saya kira itu bagian dari proses belajar dan mungkin saya mencoba bergerak terlalu cepat.
Grieverheart
3
pengkodean permainan selesai, arsitektur mesin permainan adalah dua buku tentang pengkodean permainan, Anda akan mendapatkan gambaran umum dari pipeline pengembangan dan teknologi yang mendasarinya, mereka menyentuh sedikit dari segalanya
dreta

Jawaban:

11

Saya akan menulis jawaban yang tepat karena saya berada di tahap Anda sekitar 2 bulan yang lalu.

Saya mulai menulis mesin gim yang sangat sederhana sehingga saya bisa belajar OpenGL 3.x lebih baik tetapi karena pengalaman saya dan pengetahuan saya yang jarang tentang bagaimana game 3D harus dirancang, saya biasanya mendapatkan masalah di mana saya menyadari bahwa saya seharusnya merancang kelas saya. berbeda.

Jangan khawatir tentang itu. Dengan kurangnya pengalaman Anda, Anda tidak akan pernah bisa memikirkan semua kemungkinan dan cara kelas yang akan digunakan dalam mesin Anda. Yang terbaik adalah jika Anda mempertimbangkan fitur-fitur utama kelas, mengimplementasikannya dan merestrukturisasi nantinya. Jangan mencoba terlalu banyak berpikir, Anda akan membuang-buang waktu pada tahap ini. Game pertama saya benar-benar berantakan, saya yakin itulah yang terjadi pada kebanyakan orang.

Masalah lain yang saya hadapi adalah bagaimana melacak waktu secara singkat dalam permainan dan memperbarui gerakan sesuai kebutuhan dan bagaimana memberi tahu pemberi render bahwa itu perlu digambar ulang.

Yang Anda butuhkan adalah pengetahuan tentang apa itu game loop. Ini adalah tempat yang bagus untuk memulai. Setelah Anda mulai menulis kode yang lebih kompleks seperti menangani fisika maka Anda mungkin ingin mempertimbangkan loop dengan waktu bingkai variabel, tetapi mulai dari yang kecil. Lingkaran permainan bingkai tetap sederhana sudah cukup untuk Anda saat ini.

Juga saya tetap perlu membuat fungsi Get and Set untuk melewatkan berbagai flag dari satu objek ke objek lain, apakah itu praktik yang buruk?

Ini lebih merupakan pertanyaan rekayasa perangkat lunak. Seiring waktu Anda akan melihat data mana yang perlu Anda lindungi dan mana yang aman. Mungkin yang terbaik jika Anda hanya mengimplementasikan fitur dan kemudian melihat apa yang tidak terpapar di luarnya dan dapat diperlakukan sebagai data publik.

Ini semua masalah pengalaman. Anda akan menulis kelas kamera, lalu Anda akan melihat fungsionalitas apa yang Anda inginkan darinya di samping matriks transformasi. Jika Anda ingin tips langsung, saya harus mengatakan, menerapkan tulang telanjang, memperpanjang nanti.

Artikel dan Buku:

  • Pengembangan mesin game

Buku-buku ini berbicara tentang arsitektur mesin permainan modern dan jaringan pipa. Mereka akan memberi Anda gambaran yang baik tentang teknologi yang mendasarinya. Saya merekomendasikan buku pertama jika Anda harus memilih, itu kurang "bias" terhadap teknologi tertentu, meskipun pada akhirnya Anda mungkin ingin melewati keduanya karena mereka sumber pengetahuan yang hebat.

http://www.amazon.com/Game-Engine-Architecture-Jason-Gregory/dp/1568814135

http://www.amazon.com/Game-Coding-Complete-Third-Edition/dp/1584506806

  • OpenGL

http://ogldev.atspace.co.uk/index.html

http://www.arcsynthesis.org/gltut/index.html

http://www.opengl.org/sdk/docs/man3/

  • GLSL

http://www.lighthouse3d.com/tutorials/glsl-core-tutorial/glsl-core-tutorial-index/

http://www.opengl.org/sdk/docs/manglsl/

  • Deteksi Tabrakan

http://www.peroxide.dk/papers/collision/collision.pdf

(Saya menautkan ini karena saya merasa sulit untuk menemukan artikel tentang bagaimana deteksi tabrakan 3D yang tepat dilakukan.)

Ada lebih banyak buku, tetapi pada saat Anda selesai dengan ini (terutama Arsitektur Mesin Game), Anda akan lebih tahu apa yang Anda inginkan.

Btw, saya masih menggunakan freeglut, apakah Anda akan merekomendasikan saya pindah ke sistem windowing yang lebih baik sebelum maju atau setelah saya mendapatkan pemahaman yang lebih baik tentang OpenGL?

WinAPI, jika Anda merasa punya waktu dan kemauan untuk belajar pemrograman Windows (jika Anda mengembangkan untuk Windows). FreeGLUT baik untuk belajar, tetapi akhirnya Anda akan menginginkan lebih banyak fungsi. Padahal, jika Anda ingin pergi dengan rute lain sepenuhnya, Anda dapat meluncurkan OpenGL dengan perpustakaan seperti SFML atau SDL. Tetap dengan FreeGLUT, kecuali Anda keras kepala seperti saya. Saya langsung menuju WinAPI.

dreta
sumber
Hei dreta, terima kasih banyak atas jawaban Anda yang sangat bagus, saya sedang menunggu untuk itu: P! Untungnya, saya sudah tahu cara melakukan deteksi tabrakan karena saya sudah menerapkan beberapa algoritma untuk simulasi fisika :).
Grieverheart
@ user1294203 luar biasa, saya bingung ketika memulai, jadi cukup diposting dalam kasus
dreta
Saya memilih SFML, jika Anda tidak ingin terlalu banyak mengacaukan dengan kode spesifik platform. Ini kecil, mudah, bersih, dan Anda dapat dengan mudah menyelam ke dalam kode untuk memahami bagaimana itu membungkus WINAPI misalnya.
edin-m