Bir C ++ oyun projesi için hangi kodlama dilini önerirsiniz? [kapalı]


15

Burada komut dosyası oluşturmakla, sadece bir komut dosyasına yapılandırma verilerini koymakla kalmayıp, aynı zamanda projenin bazı sınıf yöntemleri, teste özgü oyun döngüsünü vb.Gibi komut dosyaları yazmak demek değil. oyunun bazı yönlerini değiştirmek için komut dosyaları.

Lua gibi bazı dillerin luabind gibi bazı paketleyicileri vardır, ancak geçmişte kullandığımda sorun vardı çünkü kalıtım bağlamında yöntemin yeniden tanımlanmasını desteklemedi.

Kullanılacak veya kullanılmayacak dil / paketleyici önerileriniz neler?

Yanıtlar:


10

Lua-scripted video oyunları
Lua-scriptable oyun motorları

Bence Lua en iyi atış.

Bu makale Lua ve C ++ 'ın entegrasyonu ile ilgilidir. Diyor ki:

LuaBind harika bir ürün ama benim için çok karmaşık görünüyordu. Birincisi, kodun sınıfların ve nesnelerin nerede olduğunu takip etmek kolay değildir. Ayrıca Lua'yı bir wxWidgets uygulamasına entegre etmek istediğimi görünce, şablonları kullanmak hiç hayırdı (wxWidgets sitesinde çapraz platform sorunlarını okuyabilirsiniz).

Başka birçok ciltleme kütüphanesi var:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ Celes / tolua /

En iyi C ++ / Lua sarıcı nedir?

Sadece seçin ve keyfini çıkarın.


Evet, Lua'nın C ile entegrasyonu oldukça basit ve çok kolaydır. Aslında, bu Lua'nın temel amacı gömülü bir dildir.
Marco Mustapic

LuaBind referansı için teşekkürler, belki diğer bağlayıcı kütüphaneleri kazmak beni tekrar
Lua'yı

Ancak komut dosyalarınızı yalnızca ana iş parçacığında çalıştırmanızı ve performansla ilgili bir endişeniz varsa bunun için bir havuz ayırıcısı sağlamanızı öneririm.
Kylotan

6

Lua tavsiye ederim .
Python da çok popüler. Birçok özellikli oyun motoru (örneğin Blender) bunu kullanır.
C ++ :: Boost, Python ile çalışmak için bir kütüphaneye sahiptir . Sincap
hakkında okudum , ama kullanmadı.

Bu Oyun Motoruna genel bakışı okuyabilirsiniz . Bir Scriptingsütun var. Lua ve Python'un en popüler kodlama dilleri olduğunu görebilirsiniz.


Boost hakkında, bence bu büyük bir kütüphane ve birçok şey tüm projelerde pek kullanışlı değil. Aslında luabind Boost'u çok kullanıyor ve sevmediğim şeylerden biri.
Frédérick Imbeault

1
Bunun bir avantaj olduğunu söyleyebilirim. Kutudan çok fazla çözümünüz var. Ve projenizde sadece 1 extern bağımlılığı var - Boost. Güncellenmesi, kodunuzla senkronize edilmesi ve bakımı zor olan pek çok küçük kütüphane (farklı stiller, yaklaşımlar, lisanslar kullanan ve buna karşılık olarak dışsal bağımlılıklar olabilir).
2'de topright

1
Ve yalnızca ihtiyacınız olan Boost kütüphanelerini (başlıkları) dahil edersiniz. Boost çok büyük, ama buna veya buna ihtiyacınız olana kadar umursamazsınız.
2'de topright

Python ve Lua hakkında, C ++ için sınıf yöntemlerini yeniden tanımlamanıza, yeni yöntemler oluşturmanıza, vb. Ve bu özellik (güvenlik için) C ++ kodundan kontrol edilebilir mi? Söylediğim gibi, LuaBind bunları yapıyor ama bir oyun projesinde oldukça yaygın olan kalıtım bağlamında başarısız oluyor. Yeniden tanımlamak istediğim yöntemler örnek, testler için özel oyun döngüsü, oyuncu gibi varlıkların güncelleme yöntemleri, oyun dünyasının kendisinin güncelleme yöntemi, vb.
İçindir

Lua'nın sınıfları ve nesneleri yoktur, ancak tablolarla taklit edilebilirler. İşte OOP için tercih ettiğim bir Lua kütüphanesi: love2d.org/wiki/MiddleClass .
13'te topright

5

I sevme oldum Chaiscript ; Çok uzun zamandır kullanmıyorum, ancak şu ana kadar oldukça sağlam görünüyor.

Python veya lua'dan farklı olarak, baştan aşağı C ++ ile kullanılmak üzere üretilmiştir. Bağlama işlemi, luabind / etc'den çok daha temiz görünüyor.

İşte web sitesinin özeti:

ChaiScript, sıfırdan başlayarak C ++> uyumluluğu göz önünde bulundurularak tasarlanmış ilk ve tek komut dosyası dilidir. ECMAScript'ten esinlenilmiş, gömülü işlevsel bir dildir.

ChaiScript, BSD lisansı altında lisanslanmıştır.


İlginç. Performans testleri ne olacak? ChaiScript / Lua / Python karşılaştırması var mı?
2'de topright

Oldukça ilginç, şimdiye kadar yaşadığınız herhangi bir dezavantaj / hata / performans sorunu var mı?
Frédérick Imbeault

Hiçbir kriter görmedim, ancak henüz herhangi bir performans problemi yaşamadım ... ana tutuşum, sayısal türler arasında dolaylı olarak dönüştürülmemesidir (böylece bir int'i geçerseniz bir hata alırsınız) şamandıra vb. alan bir işlev).
Riley Adams

1
Sadece bir FYI, çünkü bu yorum şu anda 6 yaşında - ChaiScript şimdi örtük sayısal dönüşümler yapıyor.
lefticus

4

Neden kendin yapmıyorsun?

Zamanınız, sabrınız ve öğrenme isteğiniz varsa - ihtiyacınız olan tüm özellikler ve sözdizimiyle her zaman kendi kodlama motorunuzu geliştirmeyi deneyebilirsiniz.

Avantajları

  1. Bilgisayar Biliminin ilginç bir kısmını öğreneceksiniz.
  2. Bir 'kurum içi' kodlama motoru geliştirerek, motoru tam olarak ihtiyacınız olana göre ayarlamanıza izin vererek baştan sona tam kontrol sağlar.
  3. Daha sonra yolda herhangi bir değişiklik yapmanız gerekirse, başkalarının giriş ve çıkışlarını öğrenmek yerine, kendi kod tabanınızın giriş ve çıkışlarını bilmek biraz daha kolay olabilir.
  4. Motorunuzu başkasının yamalarıyla güncel tutmak konusunda endişelenmenize gerek kalmayacak.

Dezavantajları

  1. Zaman. Pek fazla insanda yok. ŞİMDİ bir şeye ihtiyacınız varsa, zaten var olan bir motoru deneyin (daha önce önerilenlerden biri gibi).

  2. Hız. Mevcut komut dosyası oluşturma motorlarının çoğu çok hızlıdır - özel bir çözüm o kadar hızlı olmayabilir.

  3. Takım boyu. Mevcut komut dosyası oluşturma motorlarının çoğunda, ister özel ekipler ister küresel gönüllüler olsun, kod tabanı üzerinde çalışan daha büyük insan ekipleri vardır, diğer birçok kişi tarafından kontrol edilen ve yeniden kontrol edilen kod için söylenecek bir şey vardır.

  4. Komut dosyası oluşturma motorunun etkili bir şekilde çekilmesi için belirli miktarda ilk planlama yapılması gerekir. Gerçek komut dosyası motoruyla ilgili olması gerekmeyen çok fazla zemin çalışması da yapılması gerekiyor.

  5. Oyuncu tabanınızın / geliştiricilerinizin komut dosyası motorunuza alışması gerekir. Sözdizimi ve işlevsellik çoğu modern komut dosyası çalıştırma motoruyla neredeyse aynı ise, bu bir sorun olmayabilir, ancak bunun farkında olun.

Bu ayrıntılı bir liste değildir. İstediğiniz işlevselliği elde etmek için mevcut bir komut dosyası dilinin arka ucunda büyük miktarda değişiklik yapmak zorunda olduğunuzu fark ederseniz, IMO muhtemelen gereksinimlerinize daha fazla uyan veya sadece kendinizinkini oluşturan başka bir motor aramalısınız.

İnsanların "tembelliği" atmaktan ve tekerleği yeniden icat etmekten hoşlandıklarını fark ettim ama bence bu şeylerin nasıl yapıldığını öğrenmekle ilgili söylenecek bir şey var. Ve belirli bir uygulama muhtemelen projeniz için genel bir uygulamadan daha iyi olacaktır.

"C ++ ile Komut Dosyası Sistemleri Oluşturma", insanların konuyu tartışırken paylaştığı tercih edilen makaleler gibi görünüyor: http://www.gamedev.net/reference/list.asp?categoryid=76


2
Bunun özel bir eğitim avantajı olduğunu kabul ettim. Yine de programlama dilleri teorisinde bazı bilgi ve beceriler (birçok insanın DÜŞÜNDÜĞÜNÜ) ve Bilgisayar teorisi hakkında biraz bilgi gerektirir. Bu cevaplar birine çekici gelirse, tezlere iki kitap öneririm: amazon.com/gp/product/0136073476/ref=oss_product ve amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault

Bununla birlikte, bu şeyler hakkında gerçek bir bilgi olmadan ne kadar ileri gidebileceğinize şaşıracaksınız. Birçok MUD, koşullara izin vermek için bazı hack'lerle ifade listesinden biraz daha fazlası olan bir komut dosyası diline sahiptir ve yine de bununla çok şey başarabilirler.
Kylotan

Orada bulundum, bitti. Ayrıştırma, derleyici tasarımı, baytkod makineleri, tüm bu şeyler hakkında çok şey öğrendim . Bir dahaki sefere muhtemelen Lua kullanacağım ve daha çok takdir edeceğim. :)
Kaz Ejderha

2

Lua, Python, Scheme ve Sincap'ı denedim. Lua en iyisini yaptı; Sincap'tan daha geniş bir topluluğa ve daha iyi desteğe ve Python'dan daha iyi bellek ve performans özelliklerine sahiptir. Scheme de gerçekten iyi çalıştı ve çok küçük bir tercümana sahipti, ancak tasarımcıların başlarını işlevsel bir dile sarmak zordu.


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.