Saya ingin mulai menulis mesin gim saya dari nol untuk tujuan belajar, apa prasyarat dan bagaimana melakukannya, bahasa pemrograman apa dan hal-hal yang Anda rekomendasikan kepada saya? Juga jika Anda memiliki artikel dan buku bagus tentang itu, itu akan bagus. Terima kasih sebelumnya!
Bahasa dan alat Pemrograman saya adalah:
- C / C ++ apa bagus hanya menggunakan C?
- Python
- OpenGL
- Git
- GDB
Apa yang ingin saya pelajari darinya:
- Mesin Game Inti
- Rendering / Grafik
- Play Game / Aturan
- Input (keyboard / mouse / pengontrol, dll)
Dalam Rendering / Grafik:
- 3D
- Shading
- Petir
- Tekstur
Jawaban:
Anda dapat menulis mesin gim dalam hampir semua bahasa menggunakan hampir semua metode render. Anda bisa menulis mesin permainan di bash menggunakan output konsol misalnya.
Jadi, saya pikir akan lebih baik untuk menentukan apa yang sebenarnya ingin Anda pelajari dalam menulis mesin Anda sendiri. Ada banyak "bidang" dalam pengembangan game.
Mesin Game Inti
Rendering / Grafik
AI
Jaringan
Play Game / Aturan
Suara
Input (keyboard / mouse / pengontrol, dll)
dll. Dari sana Anda bahkan dapat memiliki sub topik. Dalam Rendering / Grafik
2d atau 3d?
Pemodelan
Shading
Petir
Tekstur
GUI / Huds / Antarmuka.
dll
Hanya satu dari sub-sub-topik yang dapat menghabiskan banyak waktu (atau bertahun-tahun!) Studi!
Jadi, tentukan terlebih dahulu apa yang ingin Anda pelajari. Mulai dari yang sederhana.
Gunakan bahasa apa pun yang Anda sukai - meskipun beberapa lebih cocok untuk tugas-tugas tertentu. Sebagai contoh, mesin inti dan rendering mungkin paling baik dilakukan dengan bahasa tingkat "lebih rendah" seperti C / C ++ (jika Anda membutuhkan kinerja); tetapi sesuatu seperti AI atau Aturan Game mungkin lebih baik dilakukan dalam bahasa tingkat yang lebih tinggi. Tidak ada yang mengatakan Anda tidak dapat mencampur dan mencocokkan. Anda bisa menulis mesin Anda di C ++, rendering Anda di C (karena bekerja dengan baik dengan OpenGL) dan kemudian menggunakan LUA untuk membuat skrip pada Aturan Game Anda, dll.
Sejauh contoh, ada mesin game bernama Slick2D. Ini ditulis dalam Java dan open source. Ini adalah contoh mesin 2d sederhana yang ditulis dan dirancang dengan sangat baik. Anda dapat mempelajari konsep dasar dari itu, seperti loop game, mengelola status game, dll.
Jika Anda nyaman dengan C / C ++; Saya akan menyarankan melihat SDL / OpenGL. Ini menangani beberapa rumah tangga seperti input, suara, membuat jendela, dll dan dapat fokus pada hal-hal lain.
sumber
SDL + OpenGL adalah pilihan yang sangat baik untuk memulai mesin gim kustom.
Saya pribadi menggunakan versi C-ish dari C ++ karena saya tahu itu yang terbaik bagi saya. Maksud saya, saya tidak menggunakan pengecualian. Ada dua alasan untuk itu: pengecualian pertama dan terpenting membutuhkan pengecualian kode aman sepanjang jalan yang dengan OpenGL dan SDL tidak sepenuhnya mudah untuk dicapai. Namun yang lebih penting, dengan cara ini, sangat mudah untuk mengekspos objek C ++ pada C ABI yang luar biasa membantu jika Anda mencoba membawa bahasa skrip ke dalam campuran.
Saya berada di kapal yang sama dari Anda dan saya menuliskan beberapa petualangan saya dengan SDL dan OpenGL di sebuah blog ( immersedcode.org ) kalau-kalau ada orang lain yang tertarik.
Untuk arsitektur umum, saya punya dua saran: jika Anda ingin mesin 3D lihat buku "Game Engine Architecture" oleh Jason Lander. Jika yang Anda inginkan adalah 2D, jaga desainnya sesederhana mungkin dan biarkan diri Anda terinspirasi oleh XNA atau proyek lainnya.
Terakhir: jangan panggil OpenGL di semua tempat. Bantulah diri Anda sendiri dan mengisolasinya ke beberapa tempat sehingga Anda memiliki kemampuan untuk beralih antara desktop OpenGL / OpenGL ES atau bahkan DirectX di lain waktu jika Anda mau.
sumber
Jangan gunakan C kecuali detail implementasi menahan Anda di bawah todongan senjata. Kalau tidak, gunakan C ++, karena bahasa ini jauh lebih mampu, dan Anda selalu dapat memilih untuk tidak menggunakan kemampuan itu nanti. Saya pribadi tidak punya apa-apa untuk / melawan Python, saya tidak pernah menggunakannya.
Saya tidak akan merekomendasikan OpenGL terhadap DirectX karena DX memiliki pendekatan berorientasi objek modern, yang jauh lebih bersih dan lebih mudah dipahami / rawan kesalahan. Antarmuka yang ditawarkan oleh OpenGL sangat buruk dibandingkan.
Hal terakhir yang saya dapatkan adalah bahwa saya telah mendengar dari banyak orang yang saya percaya bahwa GDB benar-benar menyebalkan dan debugger Visual Studio sejauh ini adalah yang terbaik. Ini bukan pengalaman pribadi saya jadi bawa saja dengan sedikit garam.
sumber
extern "C"
, dan penggunaan yang tepat membuat penulisan antarmuka C agak sepele - terutama untuk Python, di mana konverter ada di dalam Boost yang memudahkan pengikatan. Bagaimana dengan fitur bahasa C ++? Mereka hebat . Lebih banyak menggunakan fitur bahasa C ++ meningkatkan keandalan proyek dan kemudahan pengkodean secara masif untuk trade-off kinerja yang sangat kecil. Fitur bahasa C sangat menyedihkan dibandingkan. Sebagai contoh, penggunaan yang benar dari kompiler C ++ modern dapat menjamin tidak ada kebocoran memori. Lakukan itu di C.