Bir oyuna kodlama dili nasıl eklersiniz?


25

Diyelim ki C ++ ile yazılmış bir oyunum var. Ancak bazı modding veya komut dosyası işlevselliği eklemek istiyorum. Bir kişi oyununuza bir betik işlevselliği ekleme hakkında nasıl gider?


En popüler dil: Bkz. Lua (Programlama dili) ve Lua (Programming langugae) - C API Örnek: IBM'in bu konuda harika bir makalesi var:
LUA'yı

Kesin adımlar büyük ölçüde eklemek istediğiniz dile bağlı. Gamedev.stackexchange.com/questions/11/…
tenpn

Yanıtlar:


27

Her şeyden önce, oyununuzun hangi kısmının kodlanacağına karar vermelisiniz. Bir seçenek, zaman açısından kritik olan arka uç işlemleri C ++ 'da kodlanmış olsa da, tüm oyun mantığının kodlama dilinde olduğu anlamında tam bir senaryoya sahip olmaktır. Tasarımcılar backend'i üst seviye scriptleme diline ait bir API olarak kullanırlar. Diğer uçta ise, kullanıcı arayüzü veya komut dizileri gibi betiklerin kullanıldığı, oyun kodunun büyük çoğunluğu hala C ++ 'da olduğu birkaç özel yere sahip olabilirsiniz. Her yaklaşımın avantajları vardır (hız, esneklik, derleme zamanı, oyunun kapsamı vb.), Ancak önceden karar vermeniz gerekir.

Komut dosyasını nasıl kullanmak istediğinizi öğrendikten sonra, şimdi mevcut bir komut dosyası dilini veya kendi etki alanına özgü dilinizi kullanıp kullanmayacağınıza karar vermeniz gerekir . Bugün, farklı tasarım hedefleri ve hedef kitleleri ile seçebileceğiniz birçok komut dosyası dili var, bu yüzden artık kendinizininkini yaratmaya değip değmeyeceğinden emin değilim. Kendinizinkini uygulamaya karar verirseniz, işte bazı kaynaklar:

Lua , popüler bir hafif ve gömme betik dilidir. Ev sahibi ve gömülü dil arasındaki iletişim için bir yığın kullanır ve birçok profesyonel oyunda başarıyla kullanılmıştır . Sol2 , Lua ve C ++ bağlanma işlemini basitleştirir. Eğer Lua'nın sözdizimine meraklı değilseniz , Moonscript , Lua'yı derleyen ve güzel özellikler ekleyen bir dildir.

Diğer seçenekler arasında C ve C ++ fonksiyonlarını doğrudan çağırmanıza izin veren AngelCode bulunur . Python ve Ruby gömmek için biraz daha karmaşık, ancak programlamak çok hoş. Python'u yerleştirmek istiyorsanız Boost.Python'a bir göz atın . Başka bir fikir, tarayıcılar için geliştirilen hızlı komut dosyası motorlarından yararlanmak için JavaScript'i yerleştirmektir (bkz. V8 ve SpiderMonkey ).


2
Mevcut oyun projem için bir betik dili kullandım ve birincil avantaj, dil ilkelleri üzerinde tam kontrol. Önceden oluşturulmuş komut dosyası çözümleri geneldir ve sağladıkları tüm özelliklere ihtiyacınız olmayabilir. Kesinlikle gerekir değil sen olmadığın sürece kendi dilinizi haddeleme düşünmek belli varolan bir çözümü daha oyununuz için daha iyi bir şey yapabilir.
Jon Purdy

Şahsen Guile'den hoşlanıyorum , C ile büyük entegrasyona sahip. Tek sorun hız, ancak önümüzdeki birkaç ay içinde 2.0 sürümünün de gelişmesi gerekiyor.
Joe D

Mükemmel cevap İlk paragraf "oyun geliştiricileri içerik için tüketilen bir API yaratın" olarak özetlenebilir.
ashes999

Özel diller için genel terim (komut dosyası veya başka türlü) DSL olup, okumak isteyip istemediğinizi öğrenmenize yardımcı olabilir.
Patrick Hughes,

2

Ben DragonFire SDK kullanarak bir oyuna GameMonkey senaryoyu gömme hakkında bir yazı yazdım buraya .

Temel olarak fikir, C \ C ++ işlevlerinizi seçtiğiniz betik diline maruz bırakmak ve onları betikten kullanmaktır. Öğreticimde DragonFire SDK'dan 2 işlev çıkardım. Oyunun başlangıcında, script'den onStart fonksiyonunu ve güncelleme sırasında onTimer fonksiyonunu script'den çağırırım.

Umarım yardımcı olur!


1
Ayrıca buraya bir video demosu yükledim: bit.ly/dnCkar
astk
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.