Go'da oyun geliştirmek? [kapalı]


40

Google’ın yeni Go dili halen başlangıç ​​aşamasındadır ve henüz yaygın gerçek dünya kullanımı veya desteği bulamamıştır. Buna rağmen, gelecek vaat eden bir deney gibi gözüküyor ve merak ediyorum, oyun geliştirme konusunda geleceği olabilir mi? Başka bir yere gitme oyununa özgü bir tartışma bulamamıştım ve bir CW tartışmasının uygun olabileceğini düşündüm.

Bazı düşünceler:

  • Golang.org 'a göre , Go programları "neredeyse karşılaştırılabilir C veya C ++ kodları kadar hızlı çalışıyor" - yeterince hızlı?
  • Go'nun çöp toplama oyunları için uygun mu?
  • Eşzamanlı goroutinler ülkesinde oyunlar oluşturmak için ne kadar zihinsel yeniden düzenleme gerekli?
  • Go, sık sık "sistem" seviyeli bir dil olarak adlandırılır ve örnek olarak sunucu yazılımı verilir. Bunu duyurken çok oyunculu oyun sunucularını düşünmemek zor.

Senin düşüncelerin?


1
Aslında sadece cevap jenerik ve bu dile değil belirli sonra ben o önemli değil sanırım eğer varlık söyledi verilen "düşünceler" dayalı yanıt aksine yanıtlamadan önce bağlantıyı izlemek için GO aşina değil herkese tavsiye ediyorum
lathomas64


4
'Eğer emin değil git ' dönüm olarak kabul edilir tamamlandı (yeniden 's insan işletilen). Ancak depolama alanı çok sınırlıdır (en azından bir düzenleme kartı kullanıyorsanız).
David C. Bishop,

@ DavidC.Bishop Funny ...
Brian Ortiz

1
Eğer bir go oyun motoru yaparsanız, dilin neler yapabileceğinden faydalandığınızdan emin olmalısınız, daha "geleneksel" bir dille kullanmaya çalıştığınızdan ve halihazırda var olanı kopyaladığınızdan emin olmalısınız.

Yanıtlar:


34

Sorularınızı kabul ediyorum:

  • Dil yeterince hızlı. Yavaş Java dili oyun geliştirme için kullanılır. Python (pygame) bile oyun geliştirme için kullanılır ve Java'dan oldukça yavaştır. Her şey oyunun türüne ve işlemci yoğunluğuna bağlıdır.
  • Genel olarak çöp toplama oyunları için çok iyi değil. Bununla birlikte, Go, maddeleri temizlerken dünyayı durduran, özellikle kötü bir çöp toplama sistemine (işaret ve süpürme) sahiptir. Başa çıkması zor olacak ve dur-kalk kare bir şeye neden olacak.
  • Goroutinler ile oyunlar oluşturmak için makul miktarda zihinsel yeniden şekillendirme gereklidir. Grafik ve mantık geleneksel anlamda eşzamanlı olamaz; fakat daha küçük bir düzeyde, mantığın bazı kısımları eşzamanlı Goroutinler için harika adaylardır (örn. AI kararlarının paralel işlenmesi, parçacık sistemleri vb.)
  • Çok oyunculu bir oyun sunucusu gerçekten Go dili için harika bir aday olabilir.

Bence, bir dille oyun yazmayı denemek için yeterince güçlü bir dürtü kullanıyorsanız, bunun için gidin. Açıkçası bunu düşünüyorsanız, o zaman bunu yapmak için bir tutkunuz var ve kendinizi normlara uymaya zorlamak yerine neden bu tutkuyu takip etmiyorsunuz? Çok daha fazlasını söyleyebilirdim ama cevabımda çok şey söyledim , "Ruby oyun geliştirme için uygun bir dil mi?"


6
"özellikle kötü bir çöp toplama sistemi (işaretle ve süpür)" işaretle ve süpür, dünyayı doğal olarak durdurmuyor - Java eşzamanlı bir işaret ve süpürme toplayıcısına sahip, örneğin Lua uzun süre saf bir tane kullandı - ve duraklama süresinin büyük bir kısmı dikkatli bir kuşak sistemi ile kontrol edilebilir. Bu varlık Git adlı söyledi olan dur-dünya mark-ve-süpürme. Ancak eski, ikincisi değil, oyunların konusudur. (Ruby iş parçacığının bu konuda da bazı garip iddiaları vardı.)

1
Mevcut Go GC sistemi bir yer tutucunun bir parçası gibi gözüküyor: "Mevcut uygulama basit bir işaretleme ve toplayıcıdır ancak işlerin yerine geçmiştir " ( golang.org/doc/go_lang_faq.html#garbage_collection ). Değiştirme seçenekleri tartışılmıştır; Konuyla ilgili kesin kararların farkında değilim.
TSomKes,

1
Joe, açıkladığın için teşekkürler! Bunun farkında değildim. Ve evet, TSomKes, bunu gördüm, böylece Go'nun bir noktada daha iyi bir çöp toplayıcı kullanacağına dair umutlarımızı devam ettirebiliriz.
Ricket

4
Yukarıdaki cevabın güncel Go çöp toplayıcısına gelince eski olduğunu unutmayın. Go 1.5 ile bambaşka bir top oyunu. Bunun hala ne kadar endişeli olduğunu merak ediyorum.
Jonas

3
Görünüşe göre 1.8 gidip, GC 100μün eşzamanlı dur-dur dünyasına indirgenecek. groups.google.com.tr/forum/#!topic/golang-dev/Ab1sFeoZg_8
Dolanor

17

Go for OSX'te (grafik penceresi için OpenGl kullanarak) küçük bir motor yazdım. C ++ oyun motorları ile ilgili bazı deneyimlerim var ( http://morganjeff.weebly.com/ ) ve denemeye karar verdi, sunduğu bazı özellikleri okuduktan sonra Git.

Go 1.1 sürümünden itibaren go, bir oyun motoru yazmak için ihtiyaç duyduğum özelliklerin çoğunu destekliyor (gerçekten bir motorun editörlerin önerdiği bir oyun çekirdeği).

  • Üye işlevi bağlama (mesajlaşma sistemi için)
  • Yansıtma yerleşiktir (serileştirme, harici araç desteği vb. İçin faydalıdır)
  • Arabirimler (sistemler, bileşenler vb. İçin polimorfik davranışlar uygulamak için)

Go kullanmanın yararlarından bazıları (büyük bir proje için):

  • Test, dilin içine inşa edilmiştir (bu, benchmark testlerini ve bazı iddiaları içerir).
  • Dile örnekler eklemek kolaydır (ve doğruluk için derlenirler)
  • Mimariye özel kod eklemek kolaydır (dosya adlandırma kuralları aracılığıyla)
  • Profil dili için yerleşiktir
  • dahili ithalat sürümleri (sürümlerini güncel ve güncel tutarken, kaynaklardan ayrı bir depoya büyük ikili dosyalar eklemenize izin verir)

Genel olarak Go kullanmanın bazı yararları:

  • Refactor koduna kolay
  • Go, diş açmayı destekler (üstüne yerleştirilmiş C ++ 'ın aksine)
  • süper hızlı derleme hızı, kodlama dili desteğine olan ihtiyacı azaltır
  • Statik yazım sistemi (arayüzler dolaylı olarak aka ördek yazarak gerçekleştirilir)
  • Birden çok dönüş değeri, adlandırılmış parametreler, etiketlenmiş yapı özellikleri
  • Harika yerleşik araçlar ve belgeler
  • yönetilen dil

Go kullanmanın bazı olumsuz yönleri:

  • Makro veya şablon yok
  • Daha olgun dillerin kütüphane desteği yok mu?
  • yönetilen dil (bilerek iki kez listelenmiştir)
  • IDE YOK

Hareketsiz bellek elde etmenin yolları var ("güvensiz" içeri aktar) ve ben bir go programının bellek ve hız için nasıl profillenebileceğini gösteren bir makale bağlayacağım. Sonuç olarak, Go'nun modern bir C olduğuna dair iddia çok doğru görünüyor. Bence "akıllıca" tasarlanmış (bahsettiğimden çok daha fazla sebepten dolayı) ve daha da önemlisi iyi belgelenmiştir. Go'da tasarlanan bir motor, C ++ 'da tasarlanan bir motordan biraz daha farklı olacak (hala alıştığım bir şey), ancak Go motoru, C ++' da gerçekten çözülmeyen birçok sorunu çözüyor (yani paralellik, C ++ dilinin karmaşıklığı ve kalıtımın yanlış kullanılması).

İşte söz verdiğim makale: http://blog.golang.org/2011/06/profiling-go-programs.html

-Jeff


GoSublime ile Sublime'ı deneyin, gerçekten bir IDE gibi hissediyor ve Java için birçok (hepsi değilse) IDE'lerden çok daha reaktif.
Arne

1
"İthalatın dahili versiyonlaması" ile ne demek istediğinizi belirtebilir misiniz, sadece go dilinin sürüm etiketinin bir uyarısıyım.
Arne

@jmorgan Go 1.2'den bu yana herhangi bir bakış açısı değişikliği ve Go 1.3'teki yaklaşan değişiklikleri görüyor musunuz?
14’ü

@Arne: İyi arama! GoSublime'ı gerçekten çok seviyorum. IDE istememe kastettiğim şey, görsel bir hata ayıklayıcıyı elde etmek için gogdb'yi kullanmanız gerektiği (ki bu harika bir araç) ama görsel stüdyo kadar hoş değil. Burada paket bağımlılıkları kastetmiştim ve ne sürüm: golang.org/cmd/go/... golang.org/cmd/go/#hdr-Import_path_syntax
jmorgan

@. Şimdi bir test kapsamı paketi ile geliyor, böylece neyin test edildiğini ve neyin olmadığını hızla görebilirsiniz. Uygun bir test odasına sahip olmanın hayatımı çok daha kolay hale getirdiğini buldum ... bu yüzden bu benim için büyük bir özellik. Go 1.3, ikili boyut ve çalışma süresi hızındaki (özellikle çöp toplayıcı) iyileştirmeler olacak gibi görünüyor, bu harika.
jmorgan

4

Düşünülmesi gereken bir başka şey de, Go'nun hala nispeten yeni olduğu için, oyun geliştirmede kullanılan ortak kütüphanelerin çoğu için bağlayıcı olmayabilir.


Kesinlikle durum. Örneğin, biri terkedilmiş gibi görünen iki Go / SDL projesiyle karşılaştım. Her ikisini de kullanan bir avuç çıplak (nispeten küçük) oyun buldum.
TSomKes

1
OpenGl kullanıyorsanız kesinlikle github.com/go-gl adresini ziyaret etmelisiniz . Vektörler için github.com/Jragonmiris/mathgl var , ama orada böcek buldum. Go yapar, C kütüphanelerini kaplamak için çok kolaydır, makefile gerek yoktur. Ayrıca C başlık dosyalarını içe aktarabilir ve işlevlerini doğrudan kullanabilirsiniz.
Arne

0

Bir oyun geliştirmek için Go kullanmayın, sadece boynunuzun etrafında bir albatros olacak. Oyun geliştirme için araç zinciri, sadece bir şeyleri kurduğunuzda, her dönüşte engelleri bulacağınız şeyleri yazdığınız dilden çok daha derinlere kadar uzanır.

Beni yanlış anlamayın, yeni dillerle oynamayı seviyorum, ancak oyunların topluluğu ve desteği olan bir dil seçmesini sağlamaya çalışıyorsanız ve çok daha iyi olursunuz.


9
Öte yandan, yeni bir dille oynamak için küçük bir indie projesinde sadece bazı şeyleri kodlayacaksanız, "araç zinciri" endişesi abartılıyor.

2
Katılmıyorum. Oyun geliştirme ile ilgili çoğu şeyin dille ilgisi yok. OpenGL hakkında soru sormak, C C ++ Go veya Java ile programladığınız hava durumu ile ilgisi yok. Bu arada, hangi araç zincirinden bahsediyorsun? Ve neden gitmek uyumsuz olmalı?
Arne
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.