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?
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?
Yanıtlar:
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 ).
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!