Oyunum için hangi kodlama dilini seçmeliyim? [kapalı]


53

Hangi durumlarda hangi kodlama dilleri diğerlerinden daha iyi?

Tüm cevaplar takdir edilmektedir, lütfen bir tanım girin ve dilin hangi durumlarda daha iyi sonuçlandığını açıklayın.

(Unutma, cevap başına bir dil)

Yanıtlar:


39

Lua, oyun endüstrisinde yaygın olarak kullanılmaktadır . Bağımsız oyunlardan ( Aquaria ) AAA başlıklarına (Civilization).

Temel sebep? Söyleyeceğim çünkü oyunlarınıza dahil edilmesi öğrenmesi kolay ve kolaydır. Ama aynı Python için söylenebilir, eminim. Komut dosyası yazmak genel olarak zor değildir. Bence Lua ile gitmenizin asıl sebebi, oradan öğrenmeniz için çok daha fazla kaynağa neden olduğu kanıtlanmış olmasıdır. Eğer normalin dışında bir şeyle denemeyi düşünüyorsanız, o zaman başka bir dille uğraşmaya başlarım.


8
Lua çok popüler çünkü "meta dil" özellikleri sunuyor. Nesneye yönelik yapıları veya saf prosedür işlevlerini vb. Uygulayabilirsiniz. Çok basit bir C arayüzüne sahiptir ve motor geliştiricisine dilin kendisinde çok esneklik sağlar.
Karantza

3
Python'un iyi bir seçim yapacağına ikna olmadım. Python için C bağları, C ile
pythonu

5
Duyduğuma göre, Ĺua ayrıca Python gibi diğer betik dilleriyle karşılaştırıldığında iyi bir çalışma süresi performansına sahip. (ve kapanışlar için tam desteğe sahiptir - bana sorarsanız gerçekten çok şık bir özellik ..)
thbusch

2
Aslında Medeniyet IV python kullanıyor ...
Emiliano

2
Gerçekten de, Civ V
Lua'yı

22

Sincap

Sincapın ilginç bir tarihi var. Bir oyun mimarı, Lua'nın tahmin edilemeyen çöp koleksiyonuyla ilgili sorunları yaşadıktan sonra inşa edildi ve çılgınca her şey boş olsa bile .

Sincap, Sol 4 Ölü 2'de kullanılan yazı dilidir . API çok lua benzeri (Sincap'ın yazarı Lua'nın tasarımını seviyor ).

Yani Sincap, 2. nesil Lua gibi harika bir dil. İyi fikirleri aldı ve sinir bozucu eksantriklikleri ortadan kaldırdı.

Lua'dan aynı:

  • eşyordamlar
  • tablolar ve metatables
  • dinamik yazılı
  • çok daha fazla

Sincap'ta Yeni:

  • sınıflar
  • diziler
  • Lua yerine eşanlamlı sözdizimi regexs.
  • Pascal / Delphi tarzı yerine C / C ++ / Java / C # tarzı dil.
  • çok daha fazla

Sincap'ın birincil dezavantajı Lua değil. Lua çok daha yaygın olarak kullanılıyor. Ama bu bir sorun değilse, Sincap kolay bir galibiyettir. Bununla birlikte, çoğu zaman dilin popülerliği kendi başına kullanışlı bir özelliktir, bu nedenle karar çok net değildir.


9

V8 Google'dan Javascript.

PRO'nun:

Kullanımı oldukça kolay

Sürekli iyileşmek

Güçlü ve esnek

Diğerleri Birçok dile getirildiği gibi, javascript ortak bir programcı aracıdır. Oyunuma eklemek, diğer dillerden daha yetenekli olanları açtı. Ayrıca programcı için işten tasarruf etmek için büyük miktarda döküm ve dönüşümü destekler, ayrıca kullanımı gerçekten çok kolaylaştırır, STL ile iyi çalışır.

Olası CON's:

Belgeler kafa karıştırıcı olabilir . Gerçekten de en iyisi değil.

Örnekler Genellikle bir tuhaflık ağı. Basit sadelikten yoksun olmak, olduğundan daha yüksek bir seviye ile karşılaşır.

Şablonlar Bazen bunlardan nefret edilir veya bundan kaçınılır.

SDK Kod tabanı boyutu Oluşturulan kod boyutu şişmiş sayılabilir.


Benim için bir con boyutu büyüklüğündeydi. Basit / gündelik bir oyun inşa ediyorsanız, v8 motoru oldukça büyüktür ve tüm oyununuzdan birçok kez daha büyük olabilir.
Zack, İnsan

Doğru, ama bağımsız bir .lib dosyası olarak bu büyük bir endişedir? Basitçe SDL'nizin veya lua'nızın yanına girer. Oluşturulan kod boyutunu kastediyorsanız, bunun ne kadar büyük olduğunu test etmedim ama bu kötü bir nokta değil.
underscorediscovery

Oluşturulan kod boyutunu kastetmiştim. Sanırım bugün çoğu oyunun büyüklüğü göz önüne alındığında bu büyük değil.
Zack, Human

1
Test edilmiş, Varsayılan shell.cc, en son SVN saatleri ile 1,441 MB bit.ly/9DNn8J . Bu oldukça ağır görünse de, çoğu kütüphanenin başka bir şey yapması gerekiyor (ağ oluşturma, grafikler) buna dramatik biçimde ekleyecektir. V8, phoenixGL, ENet, destek demeti ve çözümün içinde çok daha fazla kod içeren bir yan proje (sıkıştırma, şifreleme, gui kütüphaneleri, awesomium gibi), saat 2.5 MB'de Visual Studio 2008'de yayınlandı. sürüm "861 KB'de ağırlıklar oluşturmak. Benim için o kadar da kötü değil. Değil :) gerçi çoğu için - Belirli platformlarda ben zahmetli olma görebiliyordu
underscorediscovery

1
Projelerimde V8'i birkaç kez kullandım. IMO Javascript, oyun komut dosyası için en ideal dildir. Olay tabanlı doğa ve prototip tabanlı nesneler her şeyi çok kolaylaştırır. :)
Stephen Belanger

7

Bu oyuna ve hedef platformuna bağlıdır.

100 oyuncu olmayan karakter (RTS oyunları) kullanan bir oyunun sadece 2 (Street Fighter) koşan bir oyundan farklı ihtiyaçları vardır. PC'de çalışan bir oyun, konsolda çalışan oyundan farklı gereksinimlere sahiptir.

Lua popüler

GameMonkey birkaç ekip tarafından kullanılır. Lua'dan daha hızlı ve diş açmada daha iyi.

Python birkaç oyunda kullanılmıştır.

JavaScript motorlarını indirebilmeniz için JavaScript olası bir seçenektir. Diğer programlayıcı türlerinden daha fazla JavaScript programcısı var.

Özel diller de vardır.

SCUMM, çeşitli macera oyunlarında kullanılmıştır ve bu oyunlara özellikle uygundur.


Javascript gerçekten iyi bir fikir. Acaba neden bu alanda çekiş gücü varmış gibi görünmüyor? Herhangi bir fikir?
cflewis

JavaScript'te çekiş var. Birlik onu kullanır. Wolfire Games, motorları için de geçerli.
AA Grapsas

İki motor gerçekten çekiş yapmıyor. Sadece yeni bir gelişmenin sebebi, Mono ve V8'den önce pek çok iyi JavaScript tercümanı olmamasından kaynaklanıyor. SpiderMonkey göründüğünüz bir şey değil ve "Evet, oyunumun bu kadar hızlı ve yalın ve istikrarlı olmasını istiyorum!" Deyin!

4

Bütünlük uğruna, başka bir seçenek de, komut dosyası için .NET çerçevesinin Novell uygulamasını kullanmanıza izin veren mono komut dosyasıdır . Bu ne Unity kullanır. Monoyu uygulamanıza yerleştirme hakkında başka bir sayfa daha var .

Mono çerçevesi, orada kodlama dillerinin çoğundan (belki hepsi?) Çoğundan daha hızlıdır çünkü yorumlanmamıştır ve derleyici ile komut seti arasında bir katman olduğu için C # ve lehçeleri de dahil olmak üzere çeşitli dillerde programlamanıza izin verir. Python, Lua ve Javascript.

Ancak tüm platformlarda ücretsiz olup olmadığından emin değilim.


4
Konsol geliştirme yapıyorsanız, JITing kodunun görünüşte söz konusu olmadığını, çünkü veri sayfalarını çalıştırılabilir olarak işaretleyemeyeceğinizi unutmayın. IL, hedef platforma önceden derlenmelidir.
Jeff,

3
JIT sorunu iOS için de geçerlidir. Ayrıca Mono'nun lisans kısıtlamaları vardır. Son kullanıcının Mono çalışma zamanını yükseltmesine izin verilmediği / yükseltilemediği bir ortamda kullanmak istiyorsanız, ticari bir lisansa ihtiyacınız vardır.
Sam,

4

Şahsen, kendi projem için bir betik dili seçerken, AngelScript'i (aşağıdaki bağlantıya bakın) C ++ 'a Lua'dan daha kolay bağlamak buldum. (Aslında, biraz esneklik pahasına, kullanımı daha da kolaylaştırmak için küçük bir sarmalayıcı kitaplığı yazdım.)

http://www.angelcode.com/angelscript/

Bununla birlikte, Lua'nın ticari oyun geliştiricileri için çekici kılan birkaç avantajı olduğundan şüpheleniyorum:

(a) AngelScript'ten daha olgun ve yaygın

(b) Sözdizimi programcı olmayanlar için daha kolaydır (AngelScript çok C ++ benzeri)

(c) AngelScript'ten daha az yer kaplar (en azından hatırladığım kadarıyla)

Eğer sadece bir hobi projesi yazıyorsanız, AngelScript'in en azından bir göz atmaya değer olduğunu söyleyebilirim.


2

Oyununuzun birincil gelişim dili için sağlam ve iyi desteklenmiş bir bağlamaya sahip bir komut dosyası dili seçmelisiniz. Oyununuzu C veya C ++ ile yazıyorsanız, Python ve Lua için oldukça sağlam ciltler var. Oyununuzu .NET platformu için yazıyorsanız (C # veya başka bir dil kullanarak), ya IronPython veya IronRuby'yi kullanmanızı tavsiye ederim. Her ikisi de mükemmel performans ve .NET Framework ile çok sıkı entegrasyon sağlayan Microsoft'un Dinamik Dil Çalışma Zamanı'nı (DLR) kullanan tam dil uygulamalarıdır. C # ve IronPython / IronRuby arasındaki birlikte çalışabilirlik, günümüzde, özellikle C # 4.0'da dinamik çağrı alanı bağlamanın başlatılmasıyla oldukça düzgündür.


2

düzen

Şey, özellikle suçluluk duyuyorsun .

Guile ile sadece oyununuz için kendi DSL'nizi (Etki Alanına Özel Dil) alabilirsiniz. Parantez ve ön ek notasyonuna alışınca şema çalışılacak cennettir.

Eğer guile'ı ciddi bir oyunda kullanacaksanız, 2.0 sürümü piyasaya sürülmeden önce bir Ecmascript yorumlayıcısı olan IIRC'yi ve şu anki planı içerecek şekilde birkaç ay bekleyeceğim. Ayrıca büyük hız iyileştirmeleri görmeyi de bekleyebilirsiniz.


1

Bu, gerçekte neye ihtiyacınız olduğuna bağlı. David'in işaret ettiği gibi, Lua çok popüler, bir oyun geliştiricisi bana nedenini tam olarak bilmiyordu. Hafifliğinin ortak bir neden olduğunu düşünüyorum, ancak bu noktada birçok insanın Lua'yı kullanmasını beklerdim çünkü bu gerçek bir standart haline geldi. Çok hafif bir değişiklik için en iyi görünüyor.

Daha tam teşekküllü bir yaklaşım için Python'un doğru seçim olduğunu söyleyebilirim. Civ IV bunu makul bir etki için kullandı.


0

Bir komut dosyası dili diğeri üzerinde seçmek, sizin özel gereksinimlerinize bağlıdır.

Seçmeniz gereken seçeneklerden bazıları şunlar olabilir:

Tercümanın hızı - komut dosyası özelliği yalnızca statik davranışları kodlamak için geliştiriciler tarafından kullanılıyorsa, hız ve tam teşekküllü ve genişletilebilir bir API en önemli unsur olabilir. Orada LUA ile bazı iyi deneyimler yaşadım.

Öğrenmesi kolay, erişilebilirlik - bir içerik / seviye tasarımcısı için dinamik davranış oluşturmak için daha karmaşık komut dosyası dilleri (arka plana bağlı olarak) öğrenmek zor olabilir. Bu durumda, öğrenmesi kolay (yani yaygın olarak kullanılan) ve iyi belgelenmiş dillerin kullanımı burada daha uygun olabilir. JavaScript veya Python burada iyi bir çözüm olabilir.

İş akışı entegrasyonu - mevcut araçlara sahip belirli bir üretim hattınız varsa, diğer araçlar tamamen farklı bir araçla çalışıyorsa, belirli bir durum için en iyi görünen dili kullanmak kötü bir fikir olabilir. Bu, özellikle farklı araçlar üzerinde çalışan birkaç programcınız varsa geçerlidir. Bu durumda, "pek uyuşmuyor" dilini kullanmak daha verimli olabilir.


0

Windows için bir başlık üzerinde çalışıyorsanız ve Ortak Dil Çalışma Zamanı (CLR) üzerinde çalışan yönetilen kod yazıyorsanız - örneğin, C # dilinde diyelim - (Demir) Python'u komut dosyası dili olarak entegre etmenizi öneririm.

Tecrübelerime göre, Python'un programcı olmayanlara / tasarımcılara öğretmesi çok kolaydır. Aslında sözde kod gibi okuduğu için geliştiriciler için daha kolay almak. Dinamik olarak yazılmış olmak, daha önce kodlama deneyimi olmayan veya az olan kişilerin diliyle hızlı bir şekilde çalışıp çalışmalarına yardımcı olan özelliklerden sadece bir tanesidir.

Dilin öğrenilmesi kolay ve güçlü olmasının yanı sıra, Microsoft'taki CLR ve dil ekipleri (Anders Hejlsberg, Eric Lippert, Mads Torgersen, Jim Hugunin ve diğerleri), yeni Dinamik aracılığıyla derleyici ve çalışma zamanı özelliklerini gösterme konusunda harika çalışmalar yaptılar. .NET 4'teki Dil Çalışma Zamanı (DLR), statik olarak yazılan kod ile dinamik olarak yazılan kod arasında birlikte çalışabilirliği çok daha kolay hale getirir. Şimdiye kadar gördüklerim ve denediklerimden, kazan kodu en aza indirildi. Kod tabanınızı temiz ve bakımlı tutacaktır.

Bunu, oyununuzun komut dosyası olan bölümleriyle motor arasındaki sürtünmeyi çok düşük tutmak için kullanabilirsiniz. Her ikisinin de aynı VM içinde çalıştırılması, çalışma zamanının yürütme sırasında kodunuzun daha fazlasını optimize etmesini mümkün kılar.


0

Cevap çok çevrenize bağlı. Şu anda Unity ile çalışıyorum, bu yüzden mono tabanlı bir dil kullanıyorum (benim durumumda C #, ancak Javascript ve Boo da seçeneklerdir). Cevap tamamen sizin özel koşullarınıza bağlıdır.


-2

ActionScript, web üzerinde geniş bir şekilde dağıtılabilen Flash oyunları oluşturmak için kullanılan karma dinamik / statik bir dildir. Flixel, FlashPunk ve Box2d gibi kütüphanelerle oldukça iyi desteklenmektedir.


-2

Senaryo dilini kullanacak bir takımınız veya senaryoyu kullanacak bir lider (seviye) tasarımcınız varsa, o zaman tercih ettikleri dil ne olursa olsun devam edin. Zamanlarını bununla harcayacaklar, bu yüzden yiyecek ve içecek sağlamak için.

[tuz tanesi] Hiç kimseniz yoksa veya uzun vadede bir planınız varsa , kendinizinkini alın . evet, bir kodlama dili için bir derleyici ve / veya yorumlayıcı yazmak bir veya iki hafta sürebilir, ancak uzun vadede esneklik birçok kez ödeyecektir. Sadece uzaklara gitme ve beynini yeniden icat etme. [/ tuz tanesi]


Bir ya da iki günde bir tercüman ya da jit-derleyiciyi, lisp / scheme ya da bash ya da python ya da lua ya da erlang gibi (standart libleri olmayan herhangi bir şey) kullanmak için haskell olarak yazardım. Tercümanlık yapılmadığı sürece C ++ ya da Java dilinde bir tercüman yazmasını önermem. Ama yine de soru bu değildi.
comonad

Bence bu soru, hangisinin kullanılacağına karar vermenin değil, betik dili dillerinin artıları ve eksileri ile daha da ilgiliydi. Hala yardımcı olurum sanırım.
Michael Coleman
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.