Bir oyunda temel dilin aksine "betikleri" veya "betikleri" ne zaman kullanırım?


13

Komut dosyaları ve komut dosyası terimleri Oyun Geliştirme Yığın Değişimi'nde birbirinin yerine kullanılır gibi görünmektedir, ancak komut dosyası dili seçimi hakkındaki soruları okumak dışında, komut dosyaları ve komut dosyası ve temel dil arasındaki ilişkiyi anlamıyorum. Bir komut dosyası ne zaman kullanılır ve bazı bağlamlardaki komut dosyaları (oyun programcıları tarafından tanımlandığı gibi) bir komut dosyası dilinden farklıdır?



@Tetrad Bağlantı için teşekkür ederim, ancak bence diğer soru ne ve ne zaman aksine "mimari" temel mimarlık sorununun daha fazla tartışıyor.

2
"ne" ve "ne zaman" kullanım durumlarınıza özgü olacaktır. "Neden" size karar verme yetenekleri verir. Özellikler olmadan, bu soru bir dupe (gözlerimde).
Tetrad

Yanıtlar:


15

Komut dosyaları bir komut dosyası dili için yazılır. İnsanlar sözünü ettiğiniz karışıklığı elde etmek için argo cümlelerdeki kelimeleri kullanabilir, ancak kimseden Komut Dosyası, Komut Dosyası ve Komut Dosyası Dili tanımlarını isteyebilir ve şöyle bir şey elde edersiniz: Komut Dosyası, Komut Dosyası Dili kullanarak Komut Dosyası yazma eylemidir.

Komut dosyası dilini bir oyun motoruna veya söz ettiğiniz gibi temel dile yerleştirdiğinizde, yalnızca oyun motorundaki nesneleri değil, aynı zamanda oyun motoru için mantığın yazılmasına da izin veriyorsunuz. Dikkat edilmesi gereken diğer bir şey de, komut dosyası dilleri nadiren makine diline derlendiğinden ve bunun yerine bir bayt kodu haline getirildiği ve oyun motorunuz tarafından çalışma zamanında yorumlandığı için, oyununuzu bir tür sanal makineye dönüştürmesidir.

Bunun geliştirme ekibine büyük faydaları vardır, bunlardan birkaçı aşağıda listelenmiştir:

  • Komut dosyası dilleri genellikle bellekle yönetilir, bu nedenle ayırmalar hakkında endişelenmenize gerek yoktur
  • Genellikle gevşek bir şekilde yazılmış bir dildir, yaptığınız şey için değişken türünü kullandığınızdan emin olmanız gereğini ortadan kaldırır, sadece bir değişken yapın ve onunla devam edin.
  • Dillerin kendileri genellikle çok basittir, ancak programcı olmayan insanlara biraz kontrol sağlar
  • Komut dosyalarının değiştirilmesi, çekirdek motorun yeniden derlenmesini gerektirmez.
  • Kodlama ve Kodlama karşılaştırması genellikle oyun mantığının yinelemeli olarak ayarlanması için gereken süreyi azaltır.
  • Tasarım ve dile bağlı olarak, oyun çalışırken daha kolay ayarlama / test yapmak için genellikle bir komut dosyasını yeniden yükleyebilirsiniz.

Eminim, liste devam edebilir ve eminim, özellikle de özel oyun türlerine girdiğinizde ve komut dosyası oluşturmanın bir RTS'deki birim gruplarını taşımak için grup oluşturma kurallarını veya bir UI'nin mantığını nasıl oluşturabileceğinizi son kullanıcılarınıza ve benzerlerine genişletilebilir bir kullanıcı arayüzü sağlamak için komut dosyası dili.


9

Komut dosyası kullanmanın "temel dil" e göre birçok avantajı vardır. Bunlardan bazıları:

  • İçeriğin çekirdek geliştiricilerinden sanatçılara taşınması, çekirdek geliştiricilerin oyun görevlerinden motor görevlerine serbest bırakılması
  • Komut dosyaları korumalı alanda olma eğilimindedir, içinde gerçekten tehlikeli bir şey yapamaz
  • Komut dosyalarının değiştirilmesi, oyunun yeniden derlenmesini ve yeniden yürütülmesini gerektirmez

İlk mermi noktanız için sanatçıların düzenleyebileceği bir senaryoya taşınacak bir işlevsellik örneği verebilir misiniz?

@Brian Reindel Örnekleri silah / NPC istatistikleri, AI ve haritalar / seviyelerdir.
Hackworth

1
@Hackworth AI programlamanın sanatçılar tarafından yapıldığını mı söylüyorsunuz? Bir Sanatçı tarafından yapılacak komut dosyaları, animasyonlar ve 3B nesneler oluşturmak için komut dosyaları içerir.
KRB

3
Sanatçılar hiçbir şey programlamak için yapılmamalıdır. Motoru , güçleri başka yerlerde olan insanlara geliştirme boşaltma uğruna değil , modülerlik uğruna oyun mantığından ayırırsınız.
Jon Purdy

1
@ İyi bir şey, önemli olan: "hafif" programlama yapıyorlar, ama "içerik" kampındalar. Yani terminoloji yanıltıcıdır. =)
Jari Komppa

6

Komut dosyası genellikle çekirdek motorunuzun dışında çalışan bir kod parçasıdır. Genellikle metin dosyalarında saklamak istediğiniz her yerde bulunur. Daha sonra genellikle motor tarafından yüklenir, ayrıştırılır ve çalışma zamanında yürütülür.

Genel olarak ne olursa olsun, hangi dili kullanırsanız kullanın (örneğin, Lua, Angelscript), bu dil genellikle motor programcısının motor işlevlerini ve hatta tüm sınıfları şu anda çalışan "komut dosyası altyapısı" örneğine göstermesini sağlayan bazı olanaklara sahiptir. .

Örneğin (tamamen aptal bir örnek, ama sadece noktayı ele almak için) oyun kodunuz bir yerde zombileri ortaya çıkaran ortak bir işleve sahip olabilir:

void SpawnZombie(int x, int y, int hp /* whatever else */)
{
   //...
}

Şimdi kullandığınız komut dosyası dili, bu işlevi çalışan komut dosyası ayrıştırıcısına göstermenizi sağlar. Bu etkili bir şekilde bir metin dosyasını açabileceğiniz, "SpawnZombie (200,300,1337)" yazabileceğiniz anlamına gelir ve motorunuz kodu yürüttüğünde, bir Zombi o konumda ortaya çıkacaktır.

Diğer cevaplar zaten bunun tipik olarak nasıl kullanıldığına dair birkaç iyi örneği listeliyor, ancak çok önemli bulduğum bir noktayı dışarıda bırakıyorlar:

Bu tür komut dosyaları çalışma sırasında hata ayıklamayı veya test etmeyi çok kolaylaştırır.

Haritaya bir zombi yerleştirmenin mükemmel bir yolunu bulmak istediğinizi varsayalım, böylece keşfettiklerinde oyuncu üzerinde maksimum korkutucu etki yaratır. Komut dosyası desteği olmadan, uygulamadan çıkmanız, koddaki bazı sihirli sayıları değiştirmeniz, yeniden derlemeniz ve test etmeniz gerekir.

Komut dosyası desteği ile (çalışma zamanı sırasında metin girme yönteminiz zaten varsa, örneğin bir hata ayıklama konsolu), sadece "SpawnZombie (333,444,555)" yazıp nasıl göründüğünü görürsünüz.

Aynı şekilde silahlar, araçlar üretmeniz, farklı haritalar yüklemeniz, oyundaki bazı şeylerin değerlerini değiştirmeniz vb. test edilmiş vb.

Bu, daha karmaşık oyunlarda tonlarca tasarruf sağlayacaktır.


2

1) Komut dosyalarının değiştirilmesi genellikle koddan çok daha kolaydır.

2) Betikler genellikle sahada değiştirilebilir. Bu oyunun değiştirilmesine izin verir.


Peki, komut dosyalarınızın herkes tarafından düzenlenebilir şekilde derlenmemiş dillerle oluşturulduğunu söylemek doğru olur mu?

@Brian Reindel: Genel olarak evet.
Loren Pechtel

2

Çoğu komut dosyası dili, çekirdek motordaki dilden çok daha etkileyici. Genellikle motor performans nedenleriyle nispeten düşük seviyeli bir dilde (örn. C ++) yazılır, ancak oyun kodunun performans kadar olması gerekmez ve bu nedenle öncelikler işlevselliği kolayca ifade edebilmek için değişir.

Örneğin, dinamik ve statik yazarak. Başka bir örnek: çöp toplama ve manuel bellek yönetimi.


0

Komut dosyası oluşturma, mantığı daha yüksek bir düzeyde yazmanıza olanak tanır. Başka bir deyişle, daha fazla işlevsellik ile daha az kod yazarsınız.

Dolayısıyla, bir örnek, kodda bir şey yazmak ile bir komut dosyası dilinde yazmak arasındaki farkı gösterir.

Oyun Kodu

Update Loop
{
    if (CarExplodeAnimation.FinalFrame == true)
    {
        SceneGraph.Remove(Car);
        Message("You have destroyed the car.";
    }
    else
    {
        CarExplodeAnimation.AdvanceToNextFrame();
    }

}

Komut Dosyası Kodu

PlayAnimation(ShipExplode)  // blocks until animation completes
Message("You have destoryed the car.")

Bir komut dosyası dili kullanıyorsanız, tasarımcının ne kadar az kodlama yapması gerektiğini görün?

Nedeni oyun kodunda becase, bir olayı birden çok kareye bölmeniz ve kodu birden fazla kare perspektifinden yazmanız gerekir. Öte yandan, komut dosyası oluşturma, birden çok çerçeve olayını tek bir kod satırı olarak düşünmenize izin verir, çünkü tüm ekstra kodlar bir komut dosyası işlevinin arkasında soyutlanır.

Siz sorabilirsiniz, ancak bu işlev oyun kodunda da yazılamaz mı? Evet, ama bu, tasarımcıların oyun motorunun kaynak kodunu açması ve tüm kodları oraya yazması gerektiği anlamına geliyor ve tasarımcılarınızın oyun motorunun kaynak kodundan geçmesini istemiyorsunuz (yanlışlıkla değişebilirler) başka bir kod ve her şey çöküyor).

Bunun yerine, tasarımcınızın bunun gibi bir şey yapmasını istiyorsunuz: Harita Düzenleyici'de bir aracı sağ tıklayın, Komut Dosyası Ekle'yi tıklayın, komut dosyası kodlarını yazın. Kritik oyun motoru kaynak kodlarıyla uğraşmak yok.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.