Yanıtlar:
Komut dosyaları genellikle çalışma zamanında derlenirken , ana bilgisayar dili derleme zamanında derlenir. Bu, komut dosyası değişirse yeniden derlemeye ihtiyacımız olmadığı anlamına gelir. Tam bir oyunun yeniden derlenmesi dakikalar veya saatler alabilmekte ve bu da büyük bir verimlilik isabeti anlamına gelmektedir.
Genellikle, kritik kod veya arka uç kodu komut dosyası yazılmaz. Bu kod hızlı çalışmalı ve hafıza yönetimi çok önemlidir.
Oyunlarda, oyun mantığı ve konfigürasyonu tipik olarak script dosyalarında bulunur. Bu senaryolar programcı olmayanlar tarafından (tasarımcı gibi) oyunu kolayca değiştirmek için kolayca güncellenebilir . Script dilleri kolaydır ve bu amaç için bağışlayıcı bir şekilde hareket eder.
Genellikle, bir komut dosyası dili, gerçek zamanlı olarak komut dosyası yapmak için de kullanılır . Bu, bazı oyun öğelerinde ince ayar yapmak veya hatta hata ayıklamak için kullanışlıdır. Birçok oyun bu (çoğunlukla kurum içi) amaç için bir konsol sağlar.
Mevcut bir oyun motorunu kullanarak sadece bir komut dosyası kullanarak bir oyun yaratmanız çok iyi. Bu nedenle oyun motoru katmanı, oyun mantığı katmanından tamamen ayrıştırılır . Modern motorlar genellikle FPS veya RTS oyunlarını kolayca bu şekilde oluşturmak için kullanılabilir, ancak hiçbir tür için bu mümkün değildir. Bir MMO muhtemelen başka tür bir motor gerektirir.
Demek ki sonuçta ayrılma var. Yukarıda listelenen faydalar, genellikle bir kodlama dili oluşturmak veya entegre etmek için yapılan ekstra çalışmalardan daha fazladır.
Yanlış soruyu sordun. Sanırım asıl soru, neden C, C ++, Java vb. Gibi "komut dosyası olmayan" dilleri kullanıyoruz? Ve cevap bir nedendir: performans. (Belki atalet olabilir, ama bu atalet performans nedeniyle oradadır ve iyi bir C / C ++ / Java yazabilen herkes en azından geçirgen Ruby / Python / Lua / JavaScript yazabilir.)
"Scripting" dillerini kullanıyoruz (bu gerçekten çok yüksek seviyeli, toplanan çöpler ve genellikle bir tür daha gevşek tipleme ve dinamik derleme anlamına gelir) çünkü genel olarak herkes için daha kolay dillerdir - programcılar dahil - kod yazmak için Malloc sonra serbest bırakmayı hatırlamak veya kodunuzun istisnai güvenli olduğundan emin olmak gibi aptalca şeyler veya tüm yıkıcılarınızı sanal hale getirmeyi hatırlamak gibi. Eğer bilgisayarlarımız sonsuz hızlı olsaydı, her şey için "betik" dillerini kullanırdık.
Oyun mantığı için betik dilleri yazılım mimarisi deseni Alternate Hard and Soft Layers'a çok iyi bir örnektir . Bu sitede (ve eminim diğerlerinde) yapmanın yararları hakkında iyi bir tartışma var.
Komut dosyası değişiklikleri dağıtmak kolaydır. Örneğin, komut dosyalarını bir veritabanında tutabilirsiniz; bu, tam ikili yeniden dağıtım ve olası yeniden başlatma yerine, tek bir SQL UPDATE ifadesi yayınlamanız, muhtemelen komut dosyasını yeniden yüklemek için çalışan hizmetinize bir sinyal göndermeniz anlamına gelir.
Ayrıca betik dillerinin anlaşılması ve programlanması kolaydır, bu nedenle kodun çoğunluğu için 'hardcore' geliştiricilere (Bellek Yönetimi / İşaretçiler ve işlemci düzeyinde optimizasyonlarla uğraşanlara) ihtiyacınız yoktur (eğer büyük bir RPG, AI, Spells, Item Effects ve dünyanın kendisi için komut dosyaları genellikle motor kodundan daha büyüktür). Betik dilleri, Çöp Toplama (Lua durumunda) ve daha yüksek bir soyutlama seviyesi nedeniyle 'nasıl' yerine 'ne' üzerine yoğunlaşmaktadır.
Komut dosyalarının yararlı olduğu senaryolardan biri, motorumuzun eklentiler / eklentilerle genişletilebilir olmasını istememizdir. Bu eklentiler, çoğu durumda profesyonel olmayan kişiler tarafından (ileri düzey oyuncular ve meraklılar gibi) oluşturulur. Scriptler bu amaç için daha güvenli ve kolaydır. Senaryoları kullanarak derleyicileri kullanmaları gerekmiyor ve işaretçilerden haberdar olmaları gerekmiyor ...
Buna güzel bir örnek, World of Warcraft oyunudur. Topluluk tarafından oluşturulan binlerce eklenti vardır. Bu eklentiler LUA + XML kullanılarak yazılmıştır.