Saya sedang mengembangkan mesin game. Itu seharusnya menjadi entitas / komponen yang berbasis satu. Untuk mengembangkan game saya sendiri, saya berpikir untuk menggunakan beberapa bahasa scripting untuk benar-benar membuat entitas.
Misalnya, jika saya ingin menambahkan jenis monster yang agresif kepada pemain, itu akan menjadi entitas dengan beberapa komponen; komponen-komponen itu akan berubah dengan tipe monster, jadi jika aku memiliki seratus tipe monster yang berbeda, dalam gimku, aku tidak perlu membuat metode baru untuk masing-masingnya langsung dalam kode gimku.
Haruskah saya menggunakan bahasa scripting untuk menggambarkan entitas ini, dalam hal komponen atau apakah ada hal lain yang akan bekerja lebih baik? Secara umum, bagaimana saya harus menggunakan skrip, di game saya?
sumber
Jawaban:
Game saya menggunakan kerangka kerja komponen entitas dan menggunakan skrip untuk mendefinisikan entitas (ini tidak secara langsung mendefinisikan perilaku, saya akan berbicara lebih banyak tentang itu di akhir). Skrip menentukan komponen aktual yang akan digunakan untuk membuat setiap entitas. Ini menggunakan bahasa scripting sederhana yang saya buat. Ini adalah versi sederhana dari salah satu skrip saya:
Banyak dari itu menggambarkan diri sendiri, tetapi di sini ada beberapa hal penting:
baseAttributes
referensi tag script file lain yang mendefinisikan komponen umum yang saya tidak mau harus mendefinisikan kembali beberapa kali. Ini mengandung komponen sepertiposition
,liferequirements
dan sebagainya. Jika ada komponen yang didefinisikan di sini lagi, komponen ini akan menimpa yang umum.[NAME] { }
set mendefinisikan komponen baru yang akan ditambahkan ke entitas ini.0.01:0.015
), ketika goblin baru dibuat, ia akan dibuat dengan komponen yang memiliki nilai acak dalam rentang itu. Jadi setiap goblin akan memiliki keterampilan yang sedikit berbeda dan kecepatan yang sedikit berbeda. Pengaturan ini menetapkan bahwa semua goblin akan mulai dengan keterampilan yang sangat baik dalam menempatkan kubus dan penambangan, yang sebenarnya hanya untuk tujuan pengujian saya sendiri. Tapi karena saya yakin Anda bisa menebak, sangat mudah untuk mengubah nilai menjadi apa pun yang saya inginkan.Semua ini melibatkan pembuatan parser khusus, semacam struktur untuk menampung definisi entitas (saya sebut tambang Lexicon!) Dan pabrik untuk mengambil definisi entitas tersebut dan menghasilkan entitas baru. Bagi saya sistem ini masih dalam tahap awal, tetapi ternyata benar-benar baik. Ini adalah sistem yang sangat kuat untuk mendefinisikan entitas dengan cepat dan memungkinkan Anda untuk membuat entitas apa pun yang Anda inginkan menggunakan komponen yang Anda buat. Jika Anda tidak nyaman membuat parser Anda sendiri, saya pikir XML akan berfungsi dengan baik. Saya mengubah milik saya dari parser rekursif pushback yang saya tulis untuk bahasa pemrograman yang sedikit dibuat-buat.
Seperti yang Anda lihat, ini mendefinisikan entitas. Saya menyebutkan bahwa itu tidak secara langsung mendefinisikan perilaku. Namun, ia dapat dengan mudah mendefinisikan hal-hal seperti musuh yang dibenci dan seberapa agresif bereaksi terhadap musuh yang dikatakan. Ini akan sesederhana mendefinisikan komponen apa pun yang Anda gunakan untuk mengendalikan perilaku tersebut. Entitas saya juga memiliki komponen intelijen (tidak ditampilkan) yang mendefinisikan hal-hal seperti:
Bagaimanapun milik Anda, itu sistem Anda yang akan mengarahkan data dalam komponen itu, yang pada gilirannya mempengaruhi perilaku entites Anda.
sumber
if player.hasPoints(10) then i++ end skillTree[i]
akan menjadi beberapa pseudocode. Saya tidak tahu bagaimana pertanyaan itu relevan dengan postingan itu.Jika yang benar-benar Anda butuhkan adalah cara mendefinisikan komponen-komponen dari sebuah Monster maka XML akan berfungsi dengan baik, baik C # maupun java memiliki implementasi cepat yang kilat.
Xml Anda bisa jadi
Maka kelas Mob Anda bisa terlihat seperti. (Jawa)
Di mana IPersonality adalah antarmuka.
Anda kemudian dapat memuat xml Anda dan mengurai setiap nilai melalui pabrik.
misalnya mengurai Nilai Kepribadian ke dalam PersonalityFactory yang hanya:
Maka Anda bisa mengatur massa seperti itu
Kuncinya adalah bahwa mesin Anda mengetahui format xml dan memiliki pabrik untuk semua yang dibutuhkan.
Satu keuntungan dari xml adalah Anda dapat mendefinisikan skema Anda sendiri untuk memastikan bahwa formatnya selalu benar, lihat di sini .
Semoga ini membantu
sumber
Python baik-baik saja, saya pikir. Seringkali LUA juga merupakan alternatif yang baik jika Anda ingin menambahkan kemampuan scripting ke program Anda.
Anda bisa menggunakan XML untuk menggambarkan perilaku monster Anda, ini akan melibatkan beberapa pengkodean dalam kode permainan yang sebenarnya karena Anda hanya akan menyimpan "nama" atau beberapa atribut sesuai dengan perilaku (kecepatan, jenis senjata yang digunakan monster, dll. dari perilaku yang digunakan dalam kode game Anda.
Jika Anda menggunakan Scriptengine (misalnya LUA), Anda dapat mentransfer kode ini dari program yang telah dikompilasi ke file script yang dimuat selama runtime. Untuk melakukan ini, Anda harus mengekspos API "monster" Anda ke scriptengine. Itu memungkinkan Anda untuk memanggil metode kode monster-game dari luar.
sumber