Senin, 29 April 2019

Tugas Terjemahan Softskill 5.10 Scripting - 5.11





Tugas terjemahan Softskill

5.10 Scripting
Proporsi yang signifikan dari pengambilan keputusan dalam permainan tidak menggunakan teknik yang dijelaskan begitu jauh dalam bab ini. Pada awal dan pertengahan 1990-an, sebagian besar AI keras-kode menggunakan kode tertulis kustom untuk membuat keputusan. Ini cepat dan bekerja dengan baik untuk tim pengembangan kecil ketika programmer juga mungkin akan merancang perilaku untuk karakter permainan. Ini masih merupakan model yang dominan untuk platform dengan kebutuhan pengembangan yang sederhana (yaitu, konsol genggam generasi terakhir sebelum PSP, PDA dan ponsel). Sebagai produksi menjadi lebih kompleks, timbul ada kebutuhan untuk memisahkan konten (perilaku desain) dari mesin. Tingkat desainer diberdayakan untuk merancang perilaku luas Karakter. Banyak pengembang yang pindah untuk menggunakan teknik lain dalam bab ini. Lainnya terus untuk program perilaku mereka dalam bahasa pemrograman penuh tetapi pindah ke bahasa scripting terpisah dari kode permainan utama. Skrip dapat diperlakukan sebagai file data, dan jika bahasa scripting adalah desainer tingkat cukup sederhana atau seniman teknis dapat menciptakan perilaku. Efek samping yang tak terduga dari dukungan bahasa scripting adalah kemampuan untuk pemain untuk membuat mereka perilaku karakter sendiri dan untuk memperpanjang permainan. Modding adalah kekuatan keuangan penting di PC Permainan (dapat memperpanjang hidup mereka rak harga penuh di luar delapan minggu khas judul lain), sehingga banyak sehingga sebagian besar Triple-A judul memiliki beberapa jenis sistem scripting disertakan. Di konsol ekonomi kurang jelas dipotong. Sebagian besar perusahaan kami bekerja dengan yang memiliki internal mereka sendiri mesin permainan memiliki beberapa bentuk dukungan bahasa scripting. Sementara kita tidak yakin tentang penggunaan script untuk menjalankan karakter top-notch AI, mereka memiliki beberapa aplikasi penting: dalam scripting pemicu dan perilaku tingkat permainan (yang kunci terbuka yang pintu, misalnya), untuk pemrograman antarmuka pengguna, dan untuk cepat prototyping karakter AI. Bagian ini menyediakan primer singkat untuk mendukung bahasa scripting cukup kuat untuk menjalankan AI dalam permainan Anda. Hal ini sengaja dangkal dan dirancang untuk memberikan informasi yang cukup baik untuk memulai atau memutuskan itu tidak sebanding dengan usaha. Beberapa situs web yang sangat baik tersedia membandingkan bahasa yang ada, dan beberapa teks mencakup menerapkan bahasa Anda sendiri dari awal.

5.10.1 Language Facilities
Ada beberapa fasilitas yang permainan akan selalu membutuhkan dari bahasa scripting. Pilihan bahasa sering bermuara pada pertukaran antara keprihatinan ini. Kecepatan Bahasa scripting untuk game harus dijalankan secepat mungkin. Jika Anda bermaksud menggunakan banyak script untuk perilaku karakter dan peristiwa di tingkat permainan, maka script akan perlu untuk mengeksekusi sebagai bagian dari loop game utama. Ini berarti bahwa skrip berjalan lambat akan memakan waktu Anda perlu untuk membuat adegan, menjalankan mesin fisika, atau mempersiapkan audio. Kebanyakan bahasa dapat Kapan saja algoritma, berjalan di atas beberapa frame (Lihat Bab 9 untuk rincian). Ini mengambil tekanan dari kecepatan sampai batas tertentu, tetapi tidak dapat memecahkan masalah seluruhnya.Kompilasi dan interpretasi Bahasa scripting secara luas ditafsirkan, byte-dikompilasi, atau sepenuhnya dikompilasi, meskipun ada banyak rasa dari masing-masing teknik. Bahasa yang ditafsirkan diambil sebagai teks. Juru bahasa melihat setiap baris, bekerja keluar apa itu berarti, dan melaksanakan tindakan yang ditentukan. Byte dikompilasi bahasa dikonversi dari teks ke format internal, yang disebut kode byte. Ini Kode byte biasanya jauh lebih kompak daripada format teks. Karena kode byte diformat yang dioptimalkan untuk eksekusi, dapat berjalan lebih cepat. Bahasa yang dikompilasi byte memerlukan langkah kompilasi; mereka memakan waktu lebih lama untuk memulai, tapi kemudian berjalan lebih cepat. Langkah kompilasi yang lebih mahal dapat dilakukan sebagai beban tingkat tetapi biasanya dilakukan sebelum kapal game. Bahasa scripting permainan yang paling umum adalah semua byte-dikompilasi. Beberapa, seperti Lua, menawarkan kemampuan untuk melepaskan kompilator dan tidak mendistribusikannya dengan permainan akhir. Dengan cara ini semua script dapat dikompilasi sebelum permainan pergi ke Master, dan hanya versi dikompilasi perlu disertakan dengan permainan. Ini menghapus kemampuan pengguna untuk menulis skrip mereka sendiri, namun. Bahasa dikompilasi sepenuhnya membuat kode mesin. Ini biasanya harus dihubungkan ke utama Kode permainan, yang dapat mengalahkan titik memiliki bahasa scripting terpisah. Kita tahu satu pengembang, namun, dengan sangat rapi runtime-menghubungkan sistem yang dapat mengkompilasi dan link Kode mesin dari skrip saat runtime. Secara umum, namun, Ruang lingkup untuk masalah besar dengan pendekatan ini sangat besar. Kami akan menyarankan Anda untuk menyimpan rambut Anda dan pergi untuk sesuatu yang lebih mencoba dan Diuji.

Ekstensibilitas dan integrase Bahasa scripting Anda perlu memiliki akses ke fungsi yang signifikan dalam permainan Anda. Sebuah skrip yang mengontrol karakter, misalnya, perlu dapat menginterogasi permainan untuk mencari tahu apa yang bisa melihat dan kemudian membiarkan permainan tahu apa yang ingin lakukan sebagai hasilnya. Set fungsi yang dibutuhkan untuk mengakses jarang diketahui ketika bahasa scripting. dilaksanakan atau dipilih. Penting untuk memiliki bahasa yang dapat dengan mudah memanggil fungsi ataumenggunakan kelas dalam kode permainan utama Anda. Sama, penting bagi para programmer untuk dapat mengekspos fungsi baru atau kelas dengan mudah ketika penulis skrip memintanya.Beberapa bahasa (Lua menjadi contoh terbaik) menempatkan lapisan yang sangat tipis antara script dansisa program. Hal ini membuatnya sangat mudah untuk memanipulasi data game dari dalam skrip, tanpamemiliki seluruh rangkaian terjemahan yang rumit.

Re-Entrancy
Hal ini sering berguna untuk script untuk kembali entrant. Mereka dapat berjalan sebentar, dan ketika anggaran waktu mereka habis mereka dapat ditunda. Ketika sebuah script berikutnya mendapatkan beberapa waktu untuk menjalankan, dapat mengambil mana itu ditinggalkan. Hal ini sering membantu untuk membiarkan script menghasilkan kontrol ketika mencapai lull alami. Kemudian penjadwalan algoritma dapat memberikan lebih banyak waktu, jika telah tersedia, atau yang lain bergerak pada. Sebuah skrip mengendalikan karakter, misalnya, mungkin memiliki lima tahapan yang berbeda (meneliti situasi, memeriksa Kesehatan, memutuskan gerakan, merencanakan rute, dan mengeksekusi gerakan). Ini semua bisa dimasukkan ke dalam satu skrip yang menghasilkan antara setiap bagian. Kemudian masing-masing akan dijalankan setiap lima frame, dan beban AI adalah Didistribusikan. Tidak semua skrip harus terganggu dan dilanjutkan. Sebuah skrip yang memonitor perubahan cepat acara permainan mungkin perlu dijalankan dari awal pada setiap frame (jika tidak, mungkin akan bekerja pada informasi yang salah). Lebih canggih Re-entrancy harus memungkinkan penulis script untuk menandaiBagian sebagai Uninterruptible. Seluk-beluk ini tidak hadir dalam sebagian besar off-the-rak bahasa, tetapi dapat menjadi keuntungan besar jika Anda memutuskan untuk menulis sendiri.

5.10.2 Embedding
Penyematan terkait dengan Ekstensibilitas. Bahasa tertanam dirancang untuk dimasukkan ke dalam program lain. Ketika Anda menjalankan bahasa scripting dari workstation Anda, Anda biasanya menjalankan program khusus untuk menafsirkan file kode sumber. Dalam permainan, sistem scripting perlu dikendalikan dari dalam program utama. Permainan memutuskan skrip mana yang perlu dijalankan dan harus dapat memberitahu bahasa scripting untuk memproses mereka.
5.10.3 Choosing Language
Sejumlah besar bahasa scripting tersedia, dan banyak dari mereka yang dirilis di bawah lisensi yang cocok untuk dimasukkan dalam permainan. Secara tradisional, sebagian besar bahasa scripting dalam game telah dibuat oleh pengembang khusus untuk kebutuhan mereka. Dalam beberapa tahun terakhir telah terjadi pertumbuhan minat di luar rak bahasa. Beberapa mesin permainan komersial termasuk dukungan bahasa scripting (Unreal dan Quake oleh Perangkat lunak id, misalnya). Selain solusi lengkap ini, sebagian besar bahasa yang ada digunakan dalam permainan tidak awalnya dirancang untuk tujuan ini. Mereka memiliki keuntungan yang terkait dan kerugian yang perlu dievaluasi sebelum Anda membuat pilihan.
Keuntungan
Bahasa off-the-Shelf cenderung lebih lengkap dan kuat daripada bahasa yang Anda tulis sendiri. Jika Anda memilih bahasa yang cukup matang, seperti yang dijelaskan di bawah ini, Anda mendapatkan manfaat dari banyak waktu pengembangan, debugging upaya, dan optimasi yang telah dilakukan oleh orang lain. Ketika Anda telah menerapkan bahasa off-the-rak, pengembangan tidak berhenti. Sebuah akan terus bekerja pada bahasa, meningkatkannya, dan menghapus Bug. Banyak bahasa open source menyediakan forum web di mana masalah dapat dibahas, bug dapat dilaporkan, dan sampel kode dapat didownload. Dukungan berkelanjutan ini bisa sangat berharga dalam memastikan sistem scripting Anda kuat dan sebagai bug gratis mungkin. Banyak permainan, terutama pada PC, ditulis dengan tujuan memungkinkan konsumen untuk mengedit perilaku mereka. Pelanggan membangun objek baru, tingkat, atau seluruh mods dapat memperpanjang permainan kehidupan rak. Menggunakan bahasa scripting yang umum memungkinkan pengguna untuk belajar bahasa dengan mudah menggunakan tutorial, contoh kode, dan penafsir baris perintah yang dapat didownload dari Web. Kebanyakan bahasa memiliki newsgroup atau forum web di mana pelanggan bisa mendapatkan saran tanpa memanggil baris bantuan penayang.
Kerugian
Ketika Anda membuat bahasa scripting Anda sendiri, Anda dapat memastikan itu tidak persis apa yang Anda inginkan Untuk. Karena game sensitif terhadap keterbatasan memori dan kecepatan, Anda dapat menempatkan hanya fitur yang Anda perlu ke dalam bahasa. Seperti yang telah kita lihat dengan entrancy kembali, Anda juga dapat menambahkan fitur yang spesifik aplikasi game dan yang biasanya tidak akan dimasukkan dalam bahasa tujuan umum. Dengan cara yang sama, ketika ada sesuatu yang salah dengan bahasa, staf Anda tahu bagaimana itu dibangun dan biasanya dapat menemukan bug dan membuat solusi lebih cepat. Setiap kali Anda memasukkan kode pihak ketiga ke dalam permainan Anda, Anda kehilangan beberapa kontrol atas itu. In kebanyakan kasus, keuntungan lebih besar daripada kurangnya fleksibilitas, tetapi untuk beberapa proyek kontrol adalah suatu keharusan.

Open Source Language
Banyak bahasa scripting permainan populer yang dirilis di bawah lisensi open-source. Perangkat lunak sumber terbuka dirilis di bawah lisensi yang memberikan hak kepada pengguna untuk memasukkannya ke dalam perangkat lunak sendiri tanpa membayar biaya. Beberapa lisensi sumber terbuka mengharuskan pengguna melepaskan produk yang baru dibuat open source. Ini jelas tidak cocok untuk game komersial. Perangkat lunak open-source, seperti namanya, juga memungkinkan akses untuk melihat dan mengubah sumber Kode. Hal ini membuat mudah untuk menarik Studio dengan memberikan Anda kebebasan untuk menarik keluar setiap Asing atau kode yang tidak efisien. Beberapa lisensi sumber terbuka, bahkan yang memungkinkan Anda menggunakan bahasa dalam produk komersial, mengharuskan Anda melepaskan modifikasi apapun terhadap bahasa itu sendiri. Hal ini dapat menjadi masalah untuk proyek Anda. Apakah bahasa scripting adalah open source, ada implikasi hukum dari penggunaan bahasa dalam proyek Anda. Sebelum menggunakan teknologi luar dalam produk yang ingin Anda distribusikan (baik komersial atau tidak), Anda harus selalu berkonsultasi dengan pengacara properti intelektual yang baik. Ini buku tidak dapat menyarankan Anda secara tepat implikasi hukum dari penggunaan bahasa pihak ketiga. The komentar berikut dimaksudkan sebagai indikasi dari jenis hal yang mungkin menimbulkan kekhawatiran. Ada banyak lainnya. Dengan tidak ada yang menjual perangkat lunak, tidak ada yang bertanggung jawab jika perangkat lunak beres. Ini bisa menjadi gangguan kecil jika sulit menemukan bug muncul selama pengembangan. Ini bisa menjadi masalah hukum utama, namun, jika perangkat lunak Anda menyebabkan PC pelanggan Anda untuk menghapus hard drive. Dengan sebagian besar perangkat lunak open-source, Anda bertanggung jawab untuk perilaku produk. Ketika Anda lisensi teknologi dari perusahaan, perusahaan biasanya bertindak sebagai isolasi lapisan antara Anda dan dituntut untuk pelanggaran hak cipta atau pelanggaran paten. Seorang peneliti, untuk contoh, yang mengembangkan dan paten teknik baru memiliki hak untuk komersialisasi. Jika teknik yang sama diimplementasikan dalam perangkat lunak, tanpa izin peneliti, ia mungkin memiliki alasan untuk mengambil tindakan hukum. Ketika Anda membeli perangkat lunak dari perusahaan, dibutuhkan tanggung jawab untuk konten perangkat lunak. Jadi, jika peneliti datang setelah Anda, perusahaan yang menjual Anda perangkat lunak biasanya bertanggung jawab atas pelanggaran (tergantung pada kontrak yang Anda tandatangani). Ketika Anda menggunakan perangkat lunak open-source, tidak ada yang lisensi perangkat lunak untuk Anda, dan karena Anda tidak menulis itu, Anda tidak tahu apakah bagian dari itu dicuri atau disalin. Kecuali Anda sangat berhati-hati, Anda tidak akan tahu apakah itu melanggar paten atau hak kekayaan intelektual lainnya. The Upshot adalah bahwa Anda dapat bertanggung jawab atas pelanggaran tersebut. Anda perlu memastikan bahwa Anda memahami implikasi hukum dari menggunakan perangkat lunak "bebas". Hal ini tidak selalu yang termurah atau pilihan terbaik, meskipun biaya up-depan sangat rendah. Konsultasikan dengan pengacara sebelum Anda membuat komitmen.
5.10.4 Language Selection
Setiap orang memiliki bahasa favorit, dan mencoba untuk kembali satu pra-dibangun bahasa scripting adalah Mustahil. Membaca newsgroup bahasa pemrograman untuk menemukan tak berujung "bahasa saya lebih baik daripada milikmu "perang api. Meskipun demikian, itu adalah ide yang baik untuk memahami bahasa yang biasa tersangka dan apa kekuatan dan kelemahannya. Ingatlah bahwa biasanya mungkin untuk hack, restrukturisasi, atau menulis ulang bahasa yang ada untuk mengatasi kegagalan yang jelas. Banyak (mungkin sebagian besar) komersial
pengembang game menggunakan bahasa scripting melakukan hal ini. Bahasa yang diuraikan di bawah ini dibahas dalam bentuk Out-of-The-Box. Kita akan melihat tiga bahasa dalam urutan kita secara pribadi akan merekomendasikan mereka: lua, scheme, dan Python.

Lua
Lua adalah bahasa prosedural sederhana yang dibangun dari bawah ke atas sebagai bahasa embedding. The Desain bahasa termotivasi oleh Ekstensibilitas. Tidak seperti kebanyakan bahasa tertanam, ini tidak terbatas untuk menambahkan fungsi atau tipe data baru dalam C atau C++. Cara kerja bahasa Lua dapat juga akan tweak. Lua memiliki sejumlah kecil perpustakaan inti yang menyediakan fungsionalitas dasar. Yang relatif fitur kurang inti adalah bagian dari daya tarik, namun. Dalam permainan Anda tidak mungkin perlu perpustakaan untuk memproses apa-apa kecuali matematika dan logika. Inti kecil mudah dipelajari dan sangat fleksibel. Lua tidak mendukung fungsi Re-entrant. Seluruh juru bahasa (ketat "negara" objek, yang merangkum keadaan penafsir) adalah objek c + + dan sepenuhnya kembali entrant. Menggunakan beberapa benda negara dapat memberikan beberapa dukungan entrancy kembali, pada biaya memori dan kurangnya komunikasi di antara mereka. Lua memiliki gagasan tentang "peristiwa" dan "tag." Peristiwa terjadi pada titik tertentu dalam eksekusi script: Ketika dua nilai ditambahkan bersama-sama, ketika fungsi yang disebut, ketika Tabel hash dipertanyakan, atau ketika pengumpul sampah dijalankan, misalnya. Rutinitas di C++ atau Lua dapat didaftarkan terhadap peristiwa ini. Ini "tag" rutinitas yang disebut ketika acara terjadi, yang memungkinkan default perilaku Lua untuk diubah. Modifikasi perilaku tingkat dalam ini membuat Lua salah satu bahasa yang paling disesuaikan Anda dapat menemukan. Mekanisme peristiwa dan tag digunakan untuk memberikan dukungan berorientasi objek dasar (Lua tidak ketat berorientasi objek, tetapi Anda dapat menyesuaikan perilaku untuk mendapatkan sedekat yang Anda inginkan untuk itu), tapi Hal ini juga dapat digunakan untuk mengekspos jenis C++ kompleks untuk Lua atau untuk mengimplementasikannya memori Manajemen. Fitur Lua lain yang dicintai oleh programmer C++ adalah tipe data "userdata". Lua mendukung jenis data umum, seperti pelampung, ints, dan string. Selain itu, mendukung "userdata" generic dengan sub-jenis terkait ("tag"). Secara default, Lua tidak tahu bagaimana melakukan sesuatu dengan userdata, tetapi dengan menggunakan metode tag, perilaku yang diinginkan dapat ditambahkan. Userdata umumnya digunakan untuk memegang sebuah contoh pointer C++. Ini penanganan asli pointer dapat menyebabkan masalah, tetapi sering berarti bahwa jauh lebih sedikit kode antarmuka yang diperlukan untuk membuat Lua bekerja dengan objek permainan. Untuk bahasa scripting, Lua adalah pada akhir cepat skala. Ini memiliki model eksekusi yang sangat sederhana bahwa di puncak adalah cepat. Dikombinasikan dengan kemampuan untuk memanggil fungsi C atau C++ tanpa banyak antarmuka kode, ini berarti bahwa kinerja dunia nyata sangat mengesankan. Sintaks untuk Lua dapat dikenali untuk programmer C dan Pascal. Ini bukan bahasa yang paling mudah untuk belajar untuk seniman dan tingkat desainer, tetapi kurangnya relatif fitur sintaks berarti dapat dicapai bagi karyawan yang tajam. Meskipun dokumentasi yang lebih miskin daripada dua bahasa utama lainnya di sini, Lua adalah yang paling banyak digunakan pra-dibangun bahasa scripting dalam permainan. Saklar profil tinggi Lucas Arts dari bahasa SCUMM internal untuk Lua termotivasi sebuah balut pengembang untuk menyelidiki Kemampuan. Kami mulai menggunakan Lua beberapa tahun yang lalu, dan mudah untuk melihat mengapa hal itu dengan cepat menjadi de facto standar untuk permainan scripting. Untuk mengetahui lebih lanjut, sumber informasi terbaik adalah Lua buku Programming in Lua [Ierusalimschy, 2006], yang juga tersedia secara online gratis.

Skema dan variasi
Skema adalah bahasa scripting yang berasal dari LISP, bahasa lama yang digunakan untuk membangun sebagian besar sistem AI klasik sebelum tahun 1990-an (dan banyak sejak, tetapi tanpa dominasi yang sama). Hal pertama yang perlu diperhatikan tentang Scheme adalah sintaksnya. Untuk programmer tidak digunakan untuk LISP, scheme dapat menjadi sulit untuk dimengerti. Kurung melampirkan fungsi panggilan (dan hampir semuanya adalah fungsi panggilan) dan semua kode lainnya Blok. Ini berarti bahwa mereka dapat menjadi sangat bersarang. Baik kode indentasi membantu, tapi editor yang dapat memeriksa melampirkan kurung adalah suatu keharusan untuk pembangunan serius. Untuk setiap set tanda kurung, elemen pertama mendefinisikan apa blok itu; mungkin fungsi aritmatika:
1 (+ a 0,5)
atau pernyataan kontrol aliran:
1 (jika (> a 1,0) (set! a 1,0))
Ini mudah bagi komputer untuk memahami tetapi bertentangan dengan bahasa alami kita. Non-programmer dan yang digunakan untuk C-seperti bahasa dapat merasa sulit untuk berpikir dalam skema untuk beberapa saat. Tidak seperti Lua dan Python, ada ratusan versi skema, belum lagi varian LISP lainnya cocok untuk digunakan sebagai bahasa tertanam. Setiap varian memiliki perdagangan sendiri-off, yang membuat sulit untuk membuat generalisasi tentang kecepatan atau penggunaan memori. Pada mereka yang terbaik, Namun (minisme dan tinyscheme datang ke pikiran), mereka bisa sangat, sangat kecil (minisen kurang dari 2500 baris kode C untuk sistem lengkap, meskipun tidak memiliki beberapa yang lebih Fitur eksotis implementasi skema penuh) dan sangat mudah untuk men-tweak. The tercepat-imple dapat secepat bahasa scripting lain, dan kompilasi biasanya dapat banyak lebih efisien daripada bahasa lain (karena sintaks LISP awalnya dirancang untuk mudah penguraian). Namun, di mana skema sangat berkilau, adalah fleksibilitasnya. Tidak ada perbedaan dalam antara kode dan data, yang membuatnya mudah untuk melewati sekitar skrip dalam skema, memodifikasi kemudian menjalankannya nanti. Bukan suatu kebetulan bahwa program AI yang paling penting menggunakan teknik dalam buku ini awalnya ditulis dalam LISP. Kami telah menggunakan skema banyak, cukup untuk dapat melihat masa lalu sintaks canggung (banyak dari kita telah untuk mempelajari LISP sebagai sarjana AI). Secara profesional, kami tidak pernah menggunakan skema yang belum dimodifikasi Permainan (meskipun kita tahu setidaknya satu studio yang memiliki), tetapi kami telah membangun lebih banyak bahasa berdasarkan pada skema daripada bahasa lain (enam sampai saat ini dan satu lagi di jalan). Jika Anda berencana untuk menggulung bahasa Anda, kami sangat menyarankan Anda untuk mempelajari skema dan membaca beberapa implementasi sederhana. Ini mungkin akan membuka mata Anda untuk bagaimana mudah bahasa dapat untuk menciptakan.

Python
Python adalah mudah-untuk-belajar, berorientasi objek bahasa scripting dengan Ekstensibilitas yang sangat baik dan dukungan penyematan. Ini memberikan dukungan yang sangat baik untuk pemrograman bahasa campuran, termasuk kemampuan untuk secara transparan memanggil C dan C++ dari Python. Python memiliki dukungan untuk re-entrant berfungsi sebagai bagian dari bahasa inti dari versi 2,2 dan seterusnya (disebut Generator). Python memiliki sejumlah besar perpustakaan yang tersedia untuk itu dan memiliki dasar yang sangat besar pengguna. Python pengguna memiliki reputasi untuk membantu, dan newsgroup comp. lang. Python adalah sangat baik sumber pemecahan masalah dan saran. Kelemahan utama Python adalah kecepatan dan ukuran. Meskipun kemajuan yang signifikan dalam pelaksanaan kecepatan telah dibuat selama beberapa tahun terakhir, masih bisa lambat. Python bergantung pada pencarian Tabel hash (oleh string) untuk banyak operasi fundamental (fungsi panggilan, akses variabel, berorientasi objek pemrograman). Ini menambahkan banyak overhead. Sementara praktek pemrograman yang baik dapat meringankan banyak masalah kecepatan, Python juga memiliki reputasi untuk menjadi besar. Karena memiliki lebih banyak fungsi daripada Lua, itu lebih besar ketika terhubung ke permainan executable. Python 2. X dan selanjutnya Python 2,3 rilis menambahkan banyak fungsi untuk bahasa. Setiap rilis tambahan memenuhi lebih dari janji Python sebagai alat rekayasa perangkat lunak, tetapi oleh token yang sama membuatnya kurang menarik sebagai bahasa tertanam untuk permainan. Versi sebelumnya dari Python jauh lebih baik dalam hal ini, dan pengembang yang bekerja dengan Python sering lebih suka rilis sebelumnya. Python sering muncul aneh untuk C atau C++ programmer, karena menggunakan indentasi untuk kelompok pernyataan, sama seperti pseudo-Code dalam buku ini. Fitur yang sama membuatnya lebih mudah untuk belajar untuk non-programmer yang tidak memiliki kurung untuk
lupa dan yang tidak pergi melalui tahap pembelajaran normal tidak indentasi kode mereka. Python terkenal karena menjadi bahasa yang sangat mudah dibaca. Programer bahkan relatif pemula dapat dengan cepat melihat apa yang dilakukan skrip. Penambahan terbaru sintaks Python telah merusak reputasi sangat, tetapi masih tampaknya agak di atas para pesaingnya. Dari bahasa scripting kami telah bekerja dengan, Python telah menjadi yang paling mudah untuk tingkat desainer dan seniman untuk belajar. Pada proyek sebelumnya kita perlu menggunakan fitur ini tetapi frustrasi oleh masalah kecepatan dan ukuran. Solusi kami adalah untuk menggulung bahasa kita sendiri (Lihat bagian di bawah) tetapi menggunakan Sintaks Python.
Other Options
Ada sejumlah besar bahasa lain yang mungkin. Dalam pengalaman kami masing-masing adalah baik tidak terpakai dalam permainan (yang terbaik dari pengetahuan kita) atau memiliki kelemahan yang signifikan yang membuatnya menjadi pilihan yang sulit dibandingkan pesaingnya. Untuk pengetahuan kita, tidak ada bahasa dalam bagian ini yang melihat penggunaan komersial sebagai alat scripting dalam game. Namun, seperti biasa, tim dengan bias tertentu dan gairah untuk satu bahasa tertentu dapat bekerja di sekitar keterbatasan ini dan mendapatkan yang dapat digunakan Hasil.
Tcl
TCL adalah bahasa yang dapat digunakan dengan sangat baik. Ini dirancang untuk menjadi bahasa integrasi, menghubungkan beberapa sistem yang ditulis dalam bahasa yang berbeda. TCL adalah singkatan dari tool Control Language. Sebagian besar pengolahan TCL didasarkan pada string, yang dapat membuat eksekusi sangat lambat. Kelemahan utama lainnya adalah sintaks yang aneh, yang memakan waktu untuk membiasakan, dan tidak seperti Skema itu tidak memegang janji fungsi tambahan pada akhirnya. Ketidakkonsistenan dalam sintaks (seperti argumen yang lewat dengan nilai atau dengan nama) adalah kelemahan yang lebih serius untuk santai.
Java
Java adalah menjadi mana-mana di banyak pemrograman domain. Karena itu adalah bahasa dikompilasi, Namun, penggunaannya sebagai bahasa scripting dibatasi. Dengan token yang sama, bagaimanapun, dapat cepat. Menggunakan Jit kompilasi (kode byte akan berubah menjadi kode mesin asli sebelum eksekusi), dapat pendekatan C++ untuk kecepatan. Lingkungan eksekusi yang sangat besar, namun, dan ada yang lumayan memori. Ini adalah masalah integrasi yang paling serius, namun. Java Native Interface (yang menghubungkan Java dan kode C++) dirancang untuk memperluas Java, bukan embedding. Oleh karena itu dapat sulit untuk dikelola.
Javascript
JavaScript adalah bahasa scripting yang dirancang untuk halaman web. Sebenarnya tidak ada hubungannya dengan Java, Selain sintaks C++-seperti. Tidak ada satu implementasi JavaScript standar, sehingga pengembang yang mengaku menggunakan JavaScript kemungkinan besar bergulir bahasa mereka sendiri berdasarkan sintaks JavaScript. Keuntungan utama dari JavaScript adalah bahwa hal itu dikenal oleh banyak desainer yang telah bekerja pada web. Meskipun sintaksnya kehilangan banyak keanggunan Jawa, itu cukup bermanfaat.
Ruby
Ruby adalah bahasa yang sangat modern dengan keanggunan yang sama dengan desain yang ditemukan dalam Python, tetapi dukungan untuk idiom berorientasi objek lebih mendarah daging. Ini memiliki beberapa fitur rapi yang membuatnya mampu untuk memanipulasi kode sendiri sangat efisien. Hal ini dapat membantu ketika script harus memanggil dan mengubah perilaku skrip lain. Hal ini tidak sangat kembali pendatang dari C++ sisi, tetapi sangat mudah untuk menciptakan Re-entrancy canggih dari dalam Ruby. Hal ini sangat mudah untuk mengintegrasikan dengan kode C (tidak semudah Lua, tapi lebih mudah dari Python, misalnya). Ruby hanya mulai lepas landas, namun, dan belum menjangkau penonton dari bahasa lain dalam bab ini. Belum digunakan (dimodifikasi atau sebaliknya) dalam setiap permainan kita telah mendengar tentang. Satu kelemahan adalah kurangnya dokumentasi, meskipun yang dapat berubah dengan cepat karena memperoleh penggunaan yang lebih luas. Ini bahasa kita telah memutuskan untuk mengikuti erat untuk beberapa tahun ke depan.

5.10.5 Rolling on your Own
Kebanyakan bahasa scripting permainan kustom ditulis untuk pekerjaan di tangan. Sementara ini adalah panjang dan prosedur yang kompleks untuk satu pertandingan, kontrol tambahan dapat bermanfaat dalam jangka panjang. Studios mengembangkan seluruh rangkaian permainan menggunakan mesin yang sama akan secara efektif menyebarkan pengembangan usaha dan biaya atas beberapa judul. Terlepas dari tampilan dan kemampuan bahasa akhir, skrip akan melewati proses dalam perjalanan mereka untuk dieksekusi: semua bahasa scripting harus menyediakan set dasar yang sama elemen. Karena elemen ini begitu di mana-mana, alat telah dikembangkan dan disempurnakan untuk membuatnya mudah untuk membangun mereka. Tidak ada cara kita dapat memberikan panduan lengkap untuk membangun bahasa scripting Anda sendiri dalam hal ini Buku. Ada banyak buku lain tentang bahasa konstruksi (meskipun, mengherankan, tidak setiap buku yang baik kita tahu tentang menciptakan sebuah Scripting, bukan dikompilasi sepenuhnya, bahasa). Ini Bagian melihat elemen konstruksi bahasa scripting dari tingkat yang sangat tinggi, sebagai bantuan
Pemahaman daripada implementasi.
Tahapan pemrosesan Bahasa Memulai sebagai teks dalam file teks, skrip biasanya melewati empat tahapan: tokenization, parsing, kompilasi, dan interpretasi. Empat tahapan membentuk sebuah pipa, masing-masing memodifikasi input untuk mengubahnya menjadi format yang lebih mudah dimanipulasi. Tahapan ini mungkin tidak terjadi satu demi yang lain. Semua langkah dapat saling terkait, atau set tahapan dapat membentuk fase terpisah. Script mungkin tokenized, dipilah, dan dikompilasi offline, Misalnya, untuk interpretasi nanti.
Tokenizing
Tokenizing mengidentifikasi elemen dalam teks. Sebuah file teks hanyalah sebuah urutan karakter (dalam arti karakter ASCII!). Tokenizer bekerja keluar yang byte milik bersama-sama dan apa jenis kelompok yang mereka bentuk.

5.10.6 scripting bahasa dan AI lainnya
Jika Anda membuat upaya untuk membangun sebuah bahasa scripting ke dalam permainan Anda, kemungkinan itu akan menjalankan sebagian besar AI Anda. Sebagian besar teknik lain dalam buku ini tidak perlu dikodekan ke dalam permainan Anda. Ini dapat tampak menarik pada awalnya, tetapi Anda masih harus memiliki tujuan umum bahasa untuk berat Mengangkat.Ini adalah pendekatan yang sukses yang diambil oleh banyak Studio komersial. Biasanya, beberapa tambahan AI disediakan (biasanya sebuah mesin pathfinding, misalnya) untuk sangat prosesor kebutuhan intensif. Tapi menurut kami itu melewatkan titik teknik AI didirikan. Mereka ada karena mereka solusi elegan untuk masalah perilaku, bukan karena pemrograman di C++ tidak nyaman. Bahkan Jika Anda pergi ke bahasa scripting, Anda harus berpikir tentang algoritma yang digunakan dalam karakter Skrip. Menulis kode ad hoc dalam skrip dapat dengan cepat menjadi sebagai sulit untuk debug seperti menulis dalam C + + (lebih jadi sebenarnya, karena bahasa scripting sering memiliki jauh lebih sedikit alat debugging dewasa). Beberapa pengembang yang kita tahu telah jatuh ke dalam perangkap ini, dengan asumsi bahwa bahasa scripting berarti mereka tidak perlu berpikir tentang cara karakter diimplementasikan. Bahkan jika Anda menggunakan bahasa scripting, kami menyarankan Anda untuk berpikir tentang arsitektur dan algoritma yang Anda gunakan dalam skrip tersebut. Mungkin bahwa script dapat menerapkan salah satu teknik lain dalam bab ini, atau mungkin bahwa implementasi C++ khusus yang terpisah akan lebih praktis bersama atau bukan bahasa scripting.

5,11 Action Execution
Sepanjang bab ini kita telah berbicara tentang tindakan seolah-olah itu jelas apa yang mereka. Segala sesuatu dari pohon keputusan untuk sistem berbasis aturan menghasilkan tindakan, dan kami telah menghindari yang jelas pada apa yang format yang mungkin mereka ambil. Banyak pengembang tidak bekerja dengan tindakan sebagai konsep yang berbeda. Hasil dari setiap keputusan membuat teknik adalah hanya potongan kode yang memanggil beberapa fungsi, tweak beberapa variabel negara, atau meminta sedikit berbeda dari permainan (AI, fisika, rendering, apa pun) untuk melakukan beberapa tugas. Di sisi lain, dapat bermanfaat untuk menangani tindakan karakter melalui bagian tengah kode. Itu membuat kemampuan karakter eksplisit, membuat permainan lebih fleksibel (Anda dapat menambahkan dan menghapus jenis tindakan baru dengan mudah), dan dapat membantu sangat dalam debugging AI. Panggilan ini untuk konsep yang berbeda untuk tindakan, dengan algoritma yang berbeda untuk mengelola dan menjalankannya. Bagian ini melihat pada tindakan secara umum dan bagaimana mereka dapat dijadwalkan dan dieksekusi melalui Manajer tindakan umum. Diskusi tentang bagaimana berbagai jenis tindakan yang dijalankan adalah relevan, bahkan untuk proyek yang tidak menggunakan Manajer eksekusi pusat.