Saya membaca buku tentang Pengembangan Game di mana mereka menunjukkan kepada Anda bagaimana membuat skrip untuk permainan Anda di Lua. Mereka memprogram Lua dan menggunakannya dari C ++, tapi saya bertanya-tanya apakah ada perpustakaan atau API untuk menggunakan Lua dari C #: khusus dari XNA untuk mengembangkan game untuk PC dan XBox 360?
18
Jawaban:
Inilah yang saya tunjukkan kepada Anda (http://www.xnua.com/xna_lua_xnua), tetapi belum diperbarui untuk waktu yang lama.
C # adalah bahasa yang bagus, dan bisa digunakan sebagai bahasa skrip dalam game c # Anda. Nick Gravelyn telah membuat beberapa tutorial yang bagus tentang mesin genteng (http://blog.nickgravelyn.com/downloads/#tileengine) dan menggunakan mesin skrip khusus untuk mematikan dialog. Dia juga memiliki contoh dasar ketika dia belajar tentang kata kunci "hasil": http://blog.nickgravelyn.com/2010/02/the-magic-of-yield/
sumber
Jika Anda mencari skrip di C #, lihat IronPython . Ini bukan hanya API python untuk C #, itu sebenarnya implementasi python yang benar-benar terpisah yang mengkompilasi ke perakitan CLR yang sama (dengan kinerja yang sama) yang dilakukan C #, tetapi dapat dihubungkan dengan sebagai bahasa scripting. Setiap pembungkus Lua untuk C # akan jauh lebih lambat karena overhead dari Marshalling.
sumber
Seperti kata Sean, IronPython layak untuk dilihat. IronPython sebenarnya adalah salah satu dari beberapa implementasi bahasa dinamis untuk .NET yang menargetkan Dynamic Language Runtime (DLR). Setidaknya ada satu proyek open source yang bertujuan mengimplementasikan Lua pada DLR (seperti ini ), tapi saya tidak yakin apakah ada implementasi yang hampir selesai. Set binding DLR yang diimplementasikan dengan baik untuk Lua harus memberikan kinerja yang setara dengan IronPython dan IronRuby, dan akan jauh lebih cepat daripada pembungkus Lua. Demi perbandingan, IronPython umumnya berkinerja lebih baik daripada CPython (terkadang jauh lebih baik).
Catatan: Sebagai ElementCy menyatakan bawah, bahasa DLR umumnya tidak didukung pada Xbox 360. Namun, ada adalah sebuah "modus ditafsirkan" di DLR. Saya tidak cukup tahu tentang hal itu untuk mengatakan dengan pasti, tetapi mungkin saja untuk mendapatkan IronPython (atau implementasi bahasa DLR lainnya) untuk berjalan di Xbox 360 dalam mode yang ditafsirkan, meskipun kinerjanya pasti akan menderita. Mungkin ada baiknya bertanya kepada seseorang di tim DLR apakah mereka tahu ini mungkin. Jika tidak, Xbox 360 harus mendapatkan dukungan Reflection.Emit sebagai bagian dari dukungan Silverlight mendatang. Jika dan ketika itu terjadi, saya membayangkan mendapatkan DLR dan berjalan di Xbox 360 tidak akan menjadi masalah.
sumber
Solusi terbaik yang bisa saya berikan kepada Anda adalah dengan hanya script di C #. Anda dapat mengompilasinya saat runtime ketika Anda menargetkan jendela dan mengkompilasinya sebelum diberikan untuk xbox. (sebagai dll)
Itu akan menjadi solusi termudah. Anda juga bisa melakukannya dalam VB.NET atau bahasa .NET apa pun. (tidak yakin tentang yang scripting) Pada dasarnya, saya mengatakan untuk memiliki skrip Anda di dll mereka sendiri. Anda dapat mengompilasinya saat runtime di Windows. (apakah Anda benar-benar ingin mereka melakukan ini di xbox 360 ?, Anda tidak dapat memperbarui game di sana, setidaknya saya rasa tidak)
Saya bisa mengerti rasa frustrasi Anda, saya ingin menggunakan Lua juga.
Untuk meringkasnya: 1) Memiliki itu dibangun saat runtime pada Windows 2) Bangun sebelumnya untuk Xbox 360
Itu yang saya rekomendasikan.
sumber
Lua interpreter tidak dikelola, AFAIK, jadi Anda tidak bisa menjalankannya di Xbox dengan XNA
Anda dapat menggunakan penerjemah Javascript bernama Jint yang tidak bergantung pada DLR dan berfungsi di Xbox ( http://jint.codeplex.com/ )
sumber
Secara teknis tidak menjawab pertanyaan Anda (tidak berfungsi di xbox), tetapi LuaInterface memungkinkan integrasi Lua dengan C # yang relatif tanpa rasa sakit.
sumber
Hanya untuk memperbarui pertanyaan ini, saya menghabiskan hari terakhir melakukan pencarian yang luas, dan saya telah menemukan bahwa menggunakan UniLua (dibuat untuk digunakan dengan kesatuan, implementasi C # murni) adalah pilihan terbaik dan paling efektif untuk mendapatkan Lua di Xbox. Saya menanggalkannya, mengeluarkan semua materi Unity, dan itu bekerja dengan baik.
Saya juga menambahkan beberapa fungsionalitas yang ditemukan di LuaInterface dengan membebani operator [] untuk LuaState, dan semacamnya.
CFWLua
Saya harap ini bermanfaat.
sumber