Level Editor + Game -> Duplikasi kode rendering / game tertentu?

14

Saya telah membaca tentang cara mendesain kode untuk sebuah game. Satu hal yang belum dapat saya pahami adalah - bagaimana Anda mengelola menulis editor level di luar game (bukan 'editor level dalam game') tanpa 'menyalin' kode dari game? Misalnya, Anda mungkin harus menyalin semua kode tentang berbagai jenis entitas yang dapat Anda miliki. Anda harus menambahkan kode rendering game.

Dugaan saya adalah ini dapat dilakukan dengan membuat DLL dari bagian 'mesin' dari permainan. Kemudian, bagikan antara game aktual dan editor level.

Atau ada cara yang lebih baik / lebih mudah untuk melakukan ini?

Utkarsh Sinha
sumber

Jawaban:

13

Anda harus memisahkan kode Anda menjadi proyek yang terpisah (dalam solusi yang sama). Biasanya Anda akan memiliki pengaturan berikut:

-Engine Core       (DLL)
-Game + Game Logic (EXE)
-Content Pipeline  (DLL)
-Editor            (EXE)

Untuk proyek yang lebih besar, Anda mungkin ingin memisahkan Engine Core dari beberapa proyek seperti Core, Physics, Graphics, Audio, Input, dan Networking. Semua proyek ini tidak dapat merujuk satu sama lain, tetapi mereka semua merujuk Core di mana Anda dapat menyimpan beberapa jenis basis umum.

Jika mereka akan referensi satu sama lain pemisahan itu tidak akan berguna.

Bagaimanapun ini akan membantu Anda menggunakan kembali bagian-bagian mesin Anda di proyek lain. Misalnya untuk editor Anda perlu merujuk proyek Grafik yang mereferensikan Core itu sendiri.

Pemisahan ini juga berarti bahwa Anda sekarang dapat menggunakan teknologi Windows Only, seperti WPF, di editor Anda sementara gim Anda masih bisa menargetkan Windows dan XBLIG.

Untuk info lebih lanjut tentang menggunakan XNA di dalam lingkungan WPF lihat tautan ini: http://blogs.msdn.com/b/nicgrave/archive/2010/07/25/rendering-with-xna-framework-4-0-inside- of-a-wpf-application.aspx

Roy T.
sumber
Terima kasih! Sedikit lebih melihat-lihat dan saya menemukan ini - create.msdn.com/en-US/education/catalog/sample/… - Tampaknya WinForms didukung lebih baik daripada WPF!
Utkarsh Sinha
Hei itu benar, tapi sampel itu dari 2008, sebelum WPF benar-benar turun. Saya telah beralih dari WinForms ke WPF setahun yang lalu dan saya tidak akan beralih ke dunia :). Jika Anda ingin tetap kompatibel dengan sampel itu, Anda selalu dapat menggunakan WinFormsControlHost di aplikasi WPF :).
Roy T.
4

Pisahkan rendering logic sebaik mungkin dari logika game aktual saat mendesain mesin game Anda. Salah satu cara untuk melakukan ini adalah dengan menggunakan pola Komponen saat membangun mesin gim Anda. Misalnya, XNA menggunakan pola ini di tingkat kerangka kerja untuk fleksibilitas. Gunakan basis kode yang sama untuk rendering dengan editor level Anda; tulis pembungkus jika Anda harus.

Demikian pula, pola lain yang agak populer adalah MVC (Model-View-Controller) yang juga bisa membantu. Kode mesin Anda menggunakan MVC secara normal. Anda kemudian dapat menggunakan kode yang sama untuk Tampilan dan Model, tetapi menyuntikkan Pengendali kustom untuk mengedit Model untuk editor tingkat Anda, bukan Pengendali mesin gim yang memperbarui menurut masukan gim. Terapkan serialisasi untuk Model game untuk memuat / menyimpannya dari editor atau game.

Menyimpan komponen dalam rakitan terpisah tentu saja akan mendorong pemisahan ...

XiaoChuan Yu
sumber