Saya memiliki buku pemrograman game C ++ dan memiliki bagian Lua di dalamnya. Saya sudah mulai membaca bagian Lua, dan kedengarannya menarik, tapi saya tidak bisa menentukan pro dan kontra menggunakan Lua di game C ++ saya. Satu-satunya keuntungan yang saya pikirkan saat ini adalah Anda dapat membuat beberapa pembaruan pengkodean, melalui Lua, tanpa harus melakukan kompilasi ulang. Selain itu, saya tidak bisa memikirkan apa pun. Jadi apa pro dan kontra dari menambahkan Lua ke game C ++?
Contohnya akan dihargai.
Jawaban:
Jangan mengabaikan utilitas ini dengan mudah. Kamu tidak akan pernah mengerti seberapa produktif Anda sampai Anda mengambil langkah kompilasi.
The "mengalir" adalah sebuah konsep psikologis yang cukup dipahami dengan baik ketika datang ke pekerjaan. Alurnya adalah perasaan yang Anda dapatkan ketika Anda fokus pada suatu kegiatan, ketika Anda menganalisis dan memecahkan masalah hampir tanpa berpikir, dll. Anda paling produktif saat Anda "mengalir".
Waktu kompilasi mengacaukan semua itu. Sulit untuk tetap mengikuti arus jika Anda memiliki kompilasi 10 detik antara pengujian sesuatu.
Ketika Anda mengembangkan gameplay, apa yang biasanya Anda miliki adalah "lingkaran ketat". Anda punya ide, Anda membuat kode tes untuk melihat apakah itu berhasil, dan kemudian Anda mencobanya. Jika tidak berhasil, Anda memodifikasinya dan coba lagi. Waktu "code-to-test" sangat penting untuk menjaga aliran. Mendapatkannya sekecil mungkin sangat penting.
Apa yang Lua (atau bahasa skrip tertanam apa pun) memungkinkan Anda lakukan adalah menguji perubahan, tidak hanya tanpa "kompilasi", tetapi hidup dalam gim . Bergantung pada bagaimana Anda membangun game, Anda dapat menjalankan perintah yang akan memulai kembali game dengan skrip baru tanpa harus berhenti dan memuat ulang data dan sebagainya. Anda tidak hanya harus melakukan kompilasi ulang, Anda tidak harus menjalankan ulang.
Kemampuan untuk melakukan ini, mengingat dukungan engine yang tepat, dapat secara dramatis meningkatkan produktivitas.
Manfaat utama lain dari scripting adalah kemampuan untuk tidak peduli. Jika Anda telah menghabiskan waktu lama menulis C ++, Anda akan kagum dengan berapa banyak waktu yang Anda habiskan untuk minutae. Di mana memori dihapus. Di mana ini dibebaskan. Bahkan jika Anda menggunakan di
shared_ptr
mana - mana, tindakan mengetik semua nama variabel itu akan memperlambat Anda.Dalam bahasa skrip yang diketik secara dinamis, Anda tidak perlu peduli. Pelingkupan itu sederhana. Fungsi adalah objek kelas satu; Anda tidak perlu membangun functors secara manual. Sangat mudah untuk melakukan beberapa hal.
Nah, itu memang punya negatif, jika Anda bukan seorang programmer disiplin. Sangat mudah untuk menggunakan global di Lua (meskipun ada cara untuk mencegahnya). Tidak peduli berarti Anda bisa sangat ceroboh ketika Anda membuat kode.
Tetapi sekali lagi, menjadi sangat ceroboh dapat memiliki keuntungan .
Kelebihan lain dari Lua adalah membuat bahasa deskripsi data yang bagus. Sama seperti JSON hanyalah file JavaScript yang membangun dan mengembalikan array / tabel, Anda dapat membuat skrip Lua yang mengembalikan tabel.
Ini berguna untuk file konfigurasi; Format tabel Lua jauh lebih baik daripada format .ini. Formatnya masih agak bersih, kompak, dan dapat diperpanjang.
Oh, dan itu masih berupa skrip Lua, sehingga bisa melakukan logika yang sebenarnya. Kelemahan dari itu adalah ... yah, itu adalah skrip Lua, sehingga dapat melakukan logika yang sebenarnya . Itu bisa menjadi bencana dalam game, karena pengguna berpotensi mulai mengacaukan segalanya.
Namun sebenarnya, ini mudah ditangani. Lua dirancang untuk ditempelkan, yang berarti isolasi sebenarnya cukup mudah. Memang, keadaan Lua yang segar tidak memberikan apa-apa secara default; Anda harus benar-benar melakukan sesuatu untuk mengekspos bahkan perpustakaan Lua standar yang paling dasar. Akses file, akses kondisi permainan, dll., Semuanya merupakan penyertaan, bukan penyisihan. Dan setiap negara Lua terpisah satu sama lain. Status Lua yang Anda gunakan untuk skrip AI tidak harus status Lua yang Anda gunakan untuk file konfigurasi.
Saya sebenarnya memiliki beberapa kode yang memungkinkan Anda untuk mendaftarkan banyak perpustakaan standar Lua, tetapi melewati dan menghapus semua file IO. Pada akhirnya, hal terburuk yang dapat dilakukan file konfigurasi berbasis script Lua adalah menyebabkan game Anda langsung crash saat dijalankan, dengan kehabisan memori. Dan karena Anda tidak membagikan file konfigurasi ini secara manual, itu tidak akan menyenangkan bagi peretas.
Saya akan mengatakan bahwa kelemahan terbesar dari bahasa scripting adalah debugging. Sebagian besar bahasa skrip tidak memiliki debugger, dan Lua tidak berbeda. Lua memang memiliki semua alat yang diperlukan untuk membangun alat debugging. Tetapi sebenarnya tidak memiliki debugger built-in. Anda harus menyatukannya. Dan itu akan membutuhkan tingkat pekerjaan yang masuk akal.
Atau Anda dapat membuat karena dengan "printf debugging". Itu benar-benar tergantung pada seberapa banyak kode Lua yang Anda tulis.
sumber
Dimana saya bekerja:
Pro:
luac -l
dan mengintip bytecode untuk melakukan beberapa analisis; itu juga cukup mudah untuk mem-parsing sebagian besar file sumber lua, terutama jika Anda memiliki konvensi pengkodean. Kami dapat menegakkan konvensi lokal. Anda juga dapat melihat metalua untuk mendapatkan lebih banyak kekuatan di sini.lua_pcall
.Cons:
step
harus kita ubah secara drastis per game. Beberapa bekerja lebih baik dengan GC penuh setiap frame (set kerja kecil). Beberapa bekerja lebih baik dengan operan yang jauh lebih kecil. Perhatikan ada banyak pekerjaan dalam meningkatkan GC pada versi lua yang lebih baru dan di beberapa tambalan (yang Anda tidak perlu takut untuk menggunakannya!)lua_State
seluruhnya dalam beberapa kasus. Dan terkadang kita masih memiliki masalah. Menyetel ukuran kumpulan objek kecil (mereka diperbaiki, untuk kesederhanaan dan overhead yang lebih rendah) dan ukuran tumpukan objek besar khusus lua bisa menyebalkan. Tetapi pada sistem yang lebih besar dari sekitar 4MB, kami belum peduli dengan tumpukan dan kumpulan khusus.__index
dan__newindex
). Lebih baik jika Anda dapat menangkap kesalahan pada waktu kompilasi. Ada berbagai hal yang dapat Anda lakukan untuk meringankan ini.Lua sangat direkomendasikan, hanya bersedia bekerja sedikit dengannya! Anda mungkin juga ingin memeriksa Tupai , meskipun saya percaya ini memiliki basis pengguna yang lebih kecil.
sumber
Sebenarnya ada 3 keuntungan besar:
Faktor-faktor ini memungkinkan Anda sebagai pengembang game untuk mengaktifkan fitur yang akan mempercepat pengembangan dan meningkatkan kualitas game Anda.
Sebagai contoh:
sumber
Dari pengalaman saya, rebus sedikit.
Pro
Cons
Final, personal, vonis: jika Anda membangun gim berukuran layak dan belum memiliki bahasa scripting, dapatkan Lua. Itu akan sia-sia.
sumber
Garry's Mod adalah salah satu contoh game yang menggunakan Lua dan C ++. Mereka menggunakan Lua untuk semua mod, yang membuatnya lebih mudah bagi orang untuk membuatnya. C ++ digunakan untuk semua internal. Satu-satunya con yang bisa saya pikirkan adalah fakta bahwa Lua tidak secepat C ++.
sumber