Bagaimana Anda menambahkan bahasa scripting ke game?


25

Katakanlah saya memiliki game yang ditulis dalam C ++. Tapi saya ingin menambahkan beberapa fungsi modding atau scripting untuk itu. Bagaimana cara menambahkan fungsionalitas skrip ke game Anda?


Bahasa paling populer: Lihat Lua (Bahasa pemrograman) dan Lua (Bahasa pemrograman) - C API Contoh: IBM memiliki artikel yang bagus tentang ini: Menyematkan LUA
Tamara Wijsman

Langkah-langkah yang tepat tergantung secara besar-besaran pada bahasa yang ingin Anda tambahkan. Lihat gamedev.stackexchange.com/questions/11/…
tenpn

Jawaban:


27

Pertama-tama, Anda harus memutuskan bagian mana dari game Anda yang ditulis. Salah satu opsi adalah untuk memiliki game yang sepenuhnya ditulis dalam arti bahwa sementara operasi backend kritis-waktu dikodekan dalam C ++, semua logika game berada dalam bahasa scripting. Desainer menggunakan backend sebagai API yang dipanggil dari bahasa skrip tingkat tinggi. Di sisi lain, Anda dapat memiliki beberapa tempat spesifik tempat skrip digunakan, seperti antarmuka pengguna atau urutan skrip, dengan sebagian besar kode permainan masih dalam C ++. Ada keuntungan untuk setiap pendekatan (kecepatan, fleksibilitas, waktu kompilasi, ruang lingkup permainan, dll.), Tetapi Anda harus memutuskan itu sebelumnya.

Setelah Anda tahu bagaimana Anda ingin menggunakan skrip, Anda sekarang harus memutuskan apakah Anda akan menggunakan bahasa skrip yang ada atau Anda sendiri bahasa khusus domain . Saat ini ada banyak bahasa scripting untuk dipilih dengan berbagai tujuan desain dan target audiens, jadi saya tidak yakin apakah layak membuat Anda sendiri. Jika Anda memutuskan untuk menerapkan sendiri, berikut adalah beberapa sumber:

Lua adalah bahasa scripting yang ringan dan mudah populer. Itu menggunakan tumpukan untuk komunikasi antara host dan bahasa yang disematkan dan itu berhasil digunakan di banyak permainan profesional . Sol2 menyederhanakan proses pengikatan Lua dan C ++. Jika Anda tidak menyukai sintaks Lua, Moonscript adalah bahasa yang mengkompilasi ke Lua dan menambahkan serangkaian fitur yang bagus.

Opsi lain termasuk AngelCode , yang memungkinkan Anda untuk memanggil fungsi C dan C ++ secara langsung. Python dan Ruby sedikit lebih rumit untuk disematkan, tetapi sangat menyenangkan untuk diprogram. Jika Anda ingin menyematkan Python, lihat Boost.Python . Gagasan lain adalah menyematkan JavaScript untuk memanfaatkan mesin skrip cepat yang dikembangkan untuk peramban (lihat V8 dan SpiderMonkey ).


2
Saya telah mengimplementasikan bahasa scripting untuk proyek game saya saat ini, dan keuntungan utama adalah kontrol total atas primitif bahasa. Solusi skrip prebuilt adalah generik, dan Anda mungkin tidak memerlukan semua fitur yang disediakannya. Anda benar-benar tidak boleh berpikir untuk meluncurkan bahasa Anda sendiri kecuali Anda yakin bahwa Anda dapat membuat sesuatu yang lebih baik untuk gim Anda daripada solusi yang ada.
Jon Purdy

Secara pribadi saya suka tipu daya , ini memiliki integrasi yang hebat dengan C. Satu-satunya masalah adalah kecepatan, tetapi dengan rilis 2.0 dalam beberapa bulan ke depan yang harus ditingkatkan juga.
Joe D

Jawaban yang sangat bagus. Paragraf pertama dapat disimpulkan sebagai "pengembang game membuat API yang dikonsumsi untuk konten."
ashes999

Istilah umum untuk bahasa khusus (scripting atau lainnya) adalah DSL, yang mungkin membantu untuk mengetahui apakah Anda ingin membaca.
Patrick Hughes

2

Saya menulis posting tentang menanamkan skrip GameMonkey ke permainan menggunakan DragonFire SDK di sini .

Pada dasarnya idenya adalah untuk mengekspos fungsi C \ C ++ Anda ke bahasa skrip pilihan Anda dan menggunakannya dari skrip Anda. Dalam tutorial saya, saya mengekspos 2 fungsi dari DragonFire SDK. Pada awal permainan, saya memanggil fungsi onStart dari skrip dan saat pembaruan, saya memanggil fungsi onTimer dari skrip.

Semoga itu bisa membantu!


1
Saya juga mengunggah demo video di sini: bit.ly/dnCkar
astk
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.