Apa engine game open source yang dirancang terbaik untuk dicontoh? [Tutup]

15

Kemungkinan Gandakan:
Di mana saya dapat menemukan contoh kode permainan yang baik (terorganisasi dengan baik)?

Saya telah membuat kode beberapa game C ++ dan sekarang saya sedang membangun mesin dan editor permainan saya sendiri.

Saya memiliki keraguan tentang desain dan saya ingin menemukan contoh yang bagus untuk diikuti.

Apa yang terbaik dirancang menurut Anda?

Harus berorientasi objek. Bahasa pemrograman tidak masalah, tetapi saya lebih suka dalam urutan ini: C ++, C #, Java atau yang serupa lainnya.

Diedit: Untuk lebih memperjelas, saya tidak tertarik pada kode khusus gim. Saya ingin mesin permainan tujuan umum.

Diedit: Artikel ini menjelaskan apa itu mesin permainan: mesin permainan di wikipedia dan berikut adalah daftar mesin permainan yang dikenal: daftar mesin permainan di wikipedia

Dani
sumber
3
Apakah Anda benar-benar mengerti pertanyaan saya? Saya berharap mesin game (bukan hanya game ). Dan saya minta Harus berorientasi objek . Di utas yang Anda katakan, jawabannya hanya untuk game (Doom3, Prototype, dll.) Dan juga ada toolkit grafis (OpenSceneGraph) tetapi tidak ada yang spesifik tentang "mesin game" di utas itu ... Anda dapat menutup atau hapus pertanyaan saya jika Anda tidak suka, tapi saya tidak mengerti suara turun ... :( Pertanyaan saya tidak sama
Dani
2
Untuk lebih memperjelas, saya tidak tertarik pada kode khusus game. Saya ingin mesin permainan tujuan umum.
Dani
3
Ada perbedaan: Tidak semua game menjalankan mesin tujuan umum. Doom3 memiliki mesin spesifik FPS, Prototipe berbeda, dan seterusnya ... Mungkin mereka memiliki kesamaan (manajemen sumber daya, skrip ...) tetapi ini tidak relevan dengan pertanyaan saya. Pertanyaan saya dimulai dengan frasa "Saya telah mengode beberapa game C ++". Saya tegaskan: Kebutuhan saya adalah menemukan kode sumber mesin permainan tujuan umum yang bagus. Bukan sumber game untuk mencari kode yang dapat digunakan kembali.
Dani
1
Doom 3 memiliki "mesin spesifik FPS" tetapi juga memiliki semua bagian yang dibutuhkan mesin generik - seperti yang Anda katakan, manajemen sumber daya dan skrip, rendering 3D, fisika, dan sebagainya. Ini adalah mesin generik dan lebih banyak , tidak sedikit.
2
@ Jo Wreschnig Saya cenderung setuju dengan @Dani tentang topik ini. Meskipun semua permainan didukung oleh beberapa bentuk mesin, pola arsitektur yang digunakan untuk mesin "satu kali" dan mesin yang dirancang untuk bekerja pada beberapa judul sangat berbeda, bahkan jika mereka berdua memiliki skrip, manajemen sumber daya, rendering 3D, komponen dll. Selain itu, melihat kode untuk game yang dibangun di atas mesin yang dikembangkan oleh studio yang sama mungkin bukan pilihan yang paling bijaksana, karena itu tidak akan memberi Anda indikasi yang benar tentang seberapa fleksibel dan mudah digunakannya mesin di lingkungan pihak ke-3.
Ari Patrick 8-10

Jawaban:

6

Saya pikir cara terbaik untuk membangun mesin game adalah mulai dengan apa yang sudah Anda ketahui dengan baik dan menambahkan fitur-fitur yang membosankan atau berulang-ulang.

Sebagai contoh, saya melakukan banyak hal dengan Python / pygame (yang merupakan pembungkus SDL) saya menikmati sistem ini cukup banyak, tetapi ada tiga hal yang mengganggu saya:

  • Membangun loop animasi itu membosankan, dan semuanya hampir sama.
  • Objek sprite dasar sangat terbatas. Saya ingin peningkatan sprite dengan arah dan kecepatan, kemampuan untuk menangani berbagai kondisi tepi layar, banyak gambar, dan banyak skema tabrakan.
  • Pygame tidak memiliki fitur UI. Saya ingin label sederhana, tombol, dan pemilih nomor yang
    dapat saya tambahkan dengan mudah ke permainan saya.

Itu relatif mudah untuk membuat pembungkus berorientasi objek di sekitar fitur-fitur ini. Lihatlah bab 10 dan dokumentasi Mesin Game tersedia di sini: http://aharrisbooks.net/pythonGame/

(Ini ditulis sebagai bagian dari buku, tetapi Anda dipersilakan untuk mesin permainan bahkan jika Anda tidak menginginkan buku itu.)

Bab 10 menjelaskan motivasi dan teknik untuk membangun mesin game 2D dasar. Anda mungkin menikmatinya saat Anda membangun sendiri. Bahasa sebenarnya tidak begitu penting (kecuali tentu saja Anda akan memerlukan bahasa OOP untuk mendukung OOP.) Jika Anda sudah menggunakan SDL dengan C ++, Anda mungkin mulai dengan mengadaptasi mesin saya ke C ++ / SDL.

Dua pi
sumber
8

Desain mesin Quake (ID tech) yang terhormat telah bertahan dalam ujian waktu dan mungkin merupakan desain mesin game paling sukses sepanjang masa. Semuanya selain renderer sebagian besar tidak berubah sejak akhir pertengahan 90-an dan masih digunakan dalam game modern seperti ETQW.

Kode sumber lengkap untuk empat iterasi mesin ini (Gempa 1 hingga 3, plus Wolf ET) tersedia di bawah GPL. Mungkin ada lebih dari seratus mesin game berbasis masyarakat yang dikembangkan secara aktif dan dikembangkan yang membuat mereka tetap relevan di zaman modern. Yang patut dilihat adalah XreaL untuk renderernya yang fantastis dan ioQuake3 untuk pemeliharaan yang setia dari Quake 3 yang dioptimalkan untuk perangkat keras modern. Juga, untuk versi ID "resmi" mesin yang lebih baru, logika permainan (bukan seluruh mesin) juga tersedia.

Bahkan jika Anda tidak menggunakan mesin game ini, layak untuk dipelajari karena arsitektur pemisahan server-klien yang dipikirkan dengan matang dan pemisahan logika game dari detail tingkat rendah.

Max E.
sumber
1
Namun saya tidak akan menyebut berorientasi objek teknologi pra-Doom3 id.
Tetrad
3
Tidak, tidak berorientasi objek, tetapi seperti yang saya katakan, itu layak dipelajari. Maksudku, hanya karena itu prosedural tidak berarti itu akan memberi Anda kanker mata jika Anda melihatnya! ;)
Max E.
6

Pustaka rendering Ogre3D cukup dekat dengan kode mesin dan dari semua akun yang saya dengar dirancang dengan sangat baik dan sangat OO.

http://www.ogre3d.org/

Tetrad
sumber
+1 Mesin hebat. Terima kasih Tetrad! Saya sudah mengetahuinya, tetapi saya tidak pernah menggunakan atau melihat kode sumbernya. Apakah Anda tahu apakah ia telah mengintegrasikan AI (mis. Pencarian jalur, dll.)
Dani
3
Saya pikir itu semua hanya terkait rendering.
Tetrad
2
Ogre adalah perpustakaan render grafis saja. Mesin Rendering Grafis Berorientasi Objek.
Jonathan Sternberg
0

Ketika berbicara tentang mesin permainan, saya kira Anda sedang memikirkan apa pun yang bukan mesin render, mesin suara, mesin fisika, mesin input, dll.

Jadi Anda mungkin berpikir tentang arsitektur game, AI, atau pola desain / sistem dll, yang digunakan untuk menyusun perangkat lunak menjadi mengelola data dan komponen lain untuk membuat semacam adegan / ilalang / ilusi, sehingga menghasilkan seperangkat aturan yang dapat dikelola untuk tweak untuk membuat "video game" yang sebenarnya.

Ini adalah lapisan teratas video game yang sebenarnya, dan saya bahkan mencoba belajar sedikit tentangnya, sangat luas, rumit, dan membutuhkan banyak pengetahuan tentang semua subjek lainnya. Bayangkan Anda ingin membuat kembali realitas alternatif dari ketiadaan, melacak dan menghitung setiap peristiwa, dan membuat kembali data yang akurat dari semua itu, pada saat apa pun: untuk setiap jenis permainan ada semacam mesin permainan, dan saya tidak T pikir sebenarnya mungkin untuk membuat mesin generik yang secara matematis cukup cepat. Bahkan untuk gim di mana Anda mengontrol satu karakter, masih ada banyak hal yang bisa bervariasi dan masih bisa mengharuskan gim mengubah seluruh arsitektur.

Industri game tidak terlayani dengan baik oleh open-source seperti bidang ilmu komputer lainnya, hanya karena hiburan memiliki berbagai jenis lisensi, yang melibatkan lisensi artistik: produk game hanya dibayar oleh pelanggan, dan AFAIK, hanya ada beberapa mesin yang tampaknya cukup baik untuk Anda: Hord3d, NeoAxis, blendelf, Panda3D. Tetapi saya tidak dapat meyakinkan Anda bahwa mereka akan semudah digunakan sebagai alat seperti Unity, Torque, C4 dan lainnya; perlu diingat bahwa mesin permainan, dengan renderer grafis, saya pikir jenis perangkat lunak yang paling sulit Anda akan temukan dalam pembuatan game.

jokoon
sumber
0

Bagi saya menggunakan Python dengan Pygame adalah solusi yang bagus. Mungkin Python agak lambat tetapi untuk komputer saat ini dan jika Anda hanya mencoba untuk mengoptimalkan permainan Anda ini tidak masalah. Pygame memiliki dokumentasi yang sangat bagus di situs pygame asli. Tapi pertama-tama ambil tutorial awal untuk mempelajari beberapa dasar. Untuk pengoptimalan kecepatan (mengonversi gambar, ...) Anda memerlukan contoh lain yang mudah ditemukan.

nmin
sumber