Bahasa scripting apa yang akan Anda rekomendasikan untuk proyek game C ++? [Tutup]


14

Dengan membuat skrip di sini, saya maksudkan tidak hanya memasukkan data konfigurasi ke dalam skrip, tetapi juga membuat skrip bagian-bagian dari proyek seperti beberapa metode kelas, menguji loop game tertentu, dll. Ini tidak hanya untuk mempercepat pengembangan, tetapi juga memungkinkan pemain untuk melihat beberapa di antaranya. skrip untuk mengubah beberapa aspek permainan.

Beberapa bahasa seperti Lua memiliki beberapa pembungkus seperti luabind, tetapi ketika saya menggunakannya di masa lalu itu memiliki masalah karena tidak mendukung metode redefinisi dalam konteks pewarisan.

Apa saran Anda tentang bahasa / pembungkus untuk digunakan atau tidak digunakan?

Jawaban:


9

Lua-scripted video game
Lua-scriptable engine game

Saya pikir Lua adalah tembakan terbaik.

Artikel ini adalah tentang mengintegrasikan Lua dan C ++. Ia mengatakan:

LuaBind adalah produk hebat tetapi bagi saya itu terlihat terlalu rumit. Untuk satu kode tidak mudah diikuti di mana kelas dan objek berada. Juga melihat bahwa saya ingin mengintegrasikan Lua ke dalam aplikasi wxWidgets, menggunakan template agak tidak boleh (Anda dapat membaca masalah lintas platform di situs wxWidgets).

Ada banyak perpustakaan lain yang mengikat:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Apa bungkus C ++ / Lua terbaik?

Cukup pilih dan nikmati.


Ya, Lua sangat sederhana dan sangat mudah diintegrasikan dengan C. Sebenarnya, itulah tujuan utama Lua, menjadi bahasa yang disematkan.
Marco Mustapic

Terima kasih untuk referensi tentang LuaBind, mungkin menggali di perpustakaan lain yang mengikat akan meyakinkan saya untuk mengambil Lua lagi
Frédérick Imbeault

Saya sarankan hanya menjalankan skrip Anda di utas utama, dan menyediakan pengalokasi kumpulan untuk itu jika kinerja menjadi perhatian.
Kylotan

5

Saya menyukai Chaiscript ; Saya sudah lama tidak menggunakannya, tapi sejauh ini sepertinya cukup solid.

Tidak seperti Python atau lua, itu dibangun dari bawah ke atas untuk digunakan dengan C ++. Proses pengikatan tampaknya jauh lebih bersih daripada dengan luabind / etc.

Berikut ringkasan situs web:

ChaiScript adalah bahasa scripting pertama dan satu-satunya yang dirancang dari bawah ke atas dengan kompatibilitas C ++>. Ini adalah bahasa ECMAScript yang terinspirasi, tertanam seperti fungsional.

ChaiScript dilisensikan di bawah lisensi BSD.


Menarik. Bagaimana dengan tes kinerja? Apakah ada perbandingan ChaiScript / Lua / Python?
topright

Cukup menarik, apakah ada gangguan / bug / kinerja yang Anda alami sejauh ini?
Frédérick Imbeault

Saya belum melihat tolok ukur apa pun, tapi saya belum memiliki masalah kinerja apa pun ... pegangan utama saya sejauh ini adalah bahwa itu tidak mengkonversi antara jenis numerik secara implisit (sehingga Anda mendapatkan kesalahan jika Anda meneruskan int ke sebuah fungsi mengambil pelampung, dll).
Riley Adams

1
Hanya FYI, karena komentar ini sudah berusia 6 tahun sekarang - ChaiScript melakukan konversi numerik implisit sekarang.
lefticus

5

Saya akan merekomendasikan Lua .
Python juga sangat populer. Banyak mesin permainan berfitur (Blender, misalnya) menggunakannya.
C ++ :: Boost memiliki perpustakaan untuk bekerja dengan Python.
Saya sudah membaca tentang Squirrel , tetapi tidak menggunakannya.

Anda dapat membaca ikhtisar Mesin Game ini . Ada satu Scriptingkolom. Anda dapat melihat bahwa Lua dan Python adalah bahasa scripting paling populer.


Tentang Boost, saya pikir mungkin itu adalah perpustakaan yang sangat besar dan banyak hal tidak cukup berguna di semua proyek. Sebenarnya luabind banyak menggunakan Boost dan itu salah satu hal yang tidak saya sukai.
Frédérick Imbeault

1
Saya akan mengatakan itu keuntungan. Anda memiliki banyak banyak solusi di luar kotak. Dan proyek Anda hanya memiliki 1 ketergantungan eksternal - Tingkatkan. Tidak banyak perpustakaan kecil (yang menggunakan gaya berbeda, pendekatan, lisensi, dan pada gilirannya mungkin memiliki dependensi implisit eksternal) yang sulit untuk diperbarui, disinkronkan dengan kode Anda dan pelihara.
topright

1
Dan Anda hanya menyertakan perpustakaan Boost (header) yang Anda butuhkan. Peningkatan sangat besar, tetapi Anda tidak peduli sampai Anda membutuhkan ini atau itu.
topright

Dan tentang python dan Lua, apakah ada beberapa pembungkus untuk C ++ yang memungkinkan Anda untuk mendefinisikan kembali metode kelas, membuat metode baru, dll? Dan apakah fitur ini dapat dikontrol dari kode C ++ (untuk keamanan)? Seperti yang saya katakan, LuaBind melakukan hal-hal ini tetapi gagal dalam konteks pewarisan, yang cukup umum dalam proyek game. Metode yang ingin saya definisikan ulang adalah untuk contoh, menguji lingkaran game tertentu, metode pembaruan entitas seperti pemain, metode pembaruan dunia game itu sendiri, dll.
Frédérick Imbeault

Lua tidak memiliki kelas dan objek, tetapi mereka dapat ditiru oleh tabel. Berikut adalah perpustakaan Lua untuk OOP yang saya sukai: love2d.org/wiki/MiddleClass .
topright

4

Mengapa tidak membangun sendiri?

Jika Anda punya waktu, kesabaran dan kemauan untuk belajar - Anda selalu dapat mencoba mengembangkan mesin skrip Anda sendiri dengan semua fitur dan sintaksis yang Anda butuhkan.

Keuntungan

  1. Anda akan belajar tentang bagian yang menarik dari Ilmu Komputer.
  2. Dengan mengembangkan mesin skrip 'in-house', ia memberi Anda kontrol penuh dari awal hingga akhir dengan memungkinkan Anda menyesuaikan mesin dengan apa yang Anda butuhkan.
  3. Jika Anda perlu membuat perubahan di kemudian hari, mereka dapat membuat sedikit lebih mudah mengetahui masuk dan keluar dari basis kode Anda sendiri, daripada belajar masuk dan keluar tentang orang lain.
  4. Anda tidak perlu khawatir tentang memperbarui mesin Anda dengan tambalan orang lain.

Kekurangan

  1. Waktu. Tidak banyak orang memilikinya. Jika Anda membutuhkan sesuatu SEKARANG, cobalah mesin yang sudah ada (seperti yang sudah disarankan).

  2. Kecepatan. Banyak mesin skrip yang ada sangat cepat - solusi khusus mungkin tidak secepat.

  3. Ukuran tim. Banyak mesin skrip yang ada memiliki tim yang lebih besar dari orang yang bekerja pada basis kode, apakah itu tim pribadi atau sukarelawan global, ada sesuatu yang bisa dikatakan untuk kode yang diperiksa dan diperiksa ulang oleh banyak orang lain.

  4. Mesin scripting memerlukan sejumlah perencanaan awal untuk menarik secara efektif. Ada banyak pekerjaan dasar yang perlu diimplementasikan juga yang mungkin tidak ada hubungannya dengan mesin scripting yang sebenarnya sama sekali.

  5. Playerbase / pengembang Anda harus terbiasa dengan mesin skrip Anda. Ini mungkin tidak menjadi masalah jika sintaks dan fungsionalitasnya hampir sama dengan kebanyakan mesin skrip modern, tetapi cukup sadari.

Ini bukan daftar lengkap. Jika Anda harus membuat sejumlah besar perubahan di bagian belakang bahasa skrip yang ada untuk mendapatkan fungsionalitas yang Anda inginkan, IMO Anda mungkin harus mencari mesin lain yang lebih sesuai dengan kebutuhan Anda atau hanya membuat sendiri.

Saya menyadari orang-orang senang melempar "kemalasan" dan "tidak menemukan kembali roda" tetapi saya pikir ada sesuatu yang bisa dikatakan tentang mempelajari bagaimana hal ini dilakukan. Dan implementasi spesifik mungkin akan lebih baik untuk proyek Anda daripada implementasi generik.

"Membuat Sistem Scripting di C ++" tampaknya menjadi artikel yang disukai yang dibagikan orang ketika membahas topik: http://www.gamedev.net/reference/list.asp?categoryid=76


2
Saya setuju ini memiliki keunggulan pendidikan tertentu. Masih memerlukan beberapa pengetahuan dan keterampilan dalam teori bahasa pemrograman (yang banyak orang PIKIRKAN mereka miliki) dan beberapa pengetahuan dalam teori Komputasi. Jika jawaban ini terlihat menarik bagi seseorang, saya akan menyarankan dua buku ini: amazon.com/gp/product/0136073476/ref=oss_product dan amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault

Anda akan terkejut seberapa jauh Anda bisa pergi tanpa pengetahuan nyata tentang hal-hal itu. Banyak MUD memiliki bahasa scripting yang sedikit lebih dari daftar pernyataan dengan beberapa hack untuk mengaktifkan persyaratan, namun mereka dapat mencapai banyak hal dengan itu saja.
Kylotan

Pernah ke sana, melakukan itu. Belajar banyak tentang penguraian, desain kompiler, mesin bytecode, semua itu. Lain kali saya mungkin akan menggunakan Lua dan lebih menghargainya. :)
Kaz Dragon

2

Saya sudah mencoba Lua, Python, Skema, dan Tupai. Lua mengerjakan yang terbaik; ia memiliki komunitas yang lebih besar dan dukungan yang lebih baik daripada Squirrel, dan karakteristik kinerja dan memori yang jauh lebih baik daripada Python. Skema bekerja sangat baik juga, dan memiliki juru bahasa yang sangat kecil, tetapi sulit bagi desainer untuk membungkus kepala mereka di sekitar bahasa fungsional.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.