Java neden oyun geliştirme için daha yaygın kullanılmıyor? [kapalı]


77

Bir oyun geliştiricisi ya da bir şey değilim, ama Java'nın oyun geliştirme için çok yaygın bir şekilde kullanılmadığını biliyorum. Java çoğu oyun için yeterince hızlı olmalıdır, peki oyun nerede? Bazı sebepleri düşünebilirim:

  • Java'da uzmanlığa sahip oyun geliştiricileri eksikliği
  • İyi oyun geliştirme çerçevelerinin olmayışı
  • Programcılar Java'yı oyun programlama dili olarak kabul etmek istemiyor. Çoğu sadece C ++ 'ı kabul ediyor mu?
  • Oyun konsolları için destek yok (bilgisayar pazarı hala var olsa da)

Elbette başka bir şey olabilir. İşi benden daha iyi tanıyan biri, oyun geliştirme konusunda Java'nın neden hızlanmadığını açıklayabilir mi?


37
Ve şimdi "Java yavaştır, C ++ hızlı" cevabını gerçekten çok geniş ve tamamen doğru bir şekilde dokunan cevaplar için bekleyin. Bu şekilde yanıt veren kişilerin neredeyse kesinlikle profesyonel oyun geliştiricileri olmadığına dikkat edin.
Ed S.

20
Aslında, Java edilir oyun geliştirme için kullanılan; yani mobil pazarda. Java ME, Android.
user281377 5:11

21
Neden kullanılmalı? Java, daha yaygın kullanılan dillerin bulunmadığı bir oyun geliştiriciye ne sunar? Java, bir dil olarak eksikliklerinden ağır basan iş uygulama geliştiricilerine son derece zengin bir ekosistem sağlar, ancak oyun geliştirmeye gelince, Java platformu bir dizi alternatifle karşılaştırıldığında çok az araç sunar.
back2dos

14
İlginçtir, Minecraft Java tabanlıdır.
Uri

5
@Coder C ++ kodu yoğun şekilde optimize edilmiş gibi görünüyor, fakat Java kodu değildi. Bu yüzden geçersiz bir karşılaştırma.
Izkata

Yanıtlar:


94

Birkaç neden:

  • Eski günlerde, performans ve kullanıcı arabirimi için "doğrudan erişime" ihtiyacınız vardı. Bu, Java ve C # gibi VM dillerinden önce gelir.
  • Çoğu konsolda (örneğin, 360, PS3) JVM yoktur, bu nedenle PC sürümündeki kodu tekrar kullanamazsınız. Çeşitli cihazları desteklemek için C ++ kodunu derlemek çok daha kolaydır.
  • Çoğu ana oyun motorunda (örneğin, Unreal) C ++ bağları var. Bazı Java bağlayıcıları (örneğin, OpenGL için) var ancak buna benzer bir şey yok.
  • PC oyunları için DirectX'in gerçekten güçlü bir Java desteği yoktur (eğer varsa).
  • Web tabanlı oyunlar JavaScript veya Flash ile çalışır. GWT gibi şeyler kullanırken onları Java'da yazabilirsiniz.
  • İPhone bir Objective-C varyantı çalıştırıyor.

Java bugünlerde Android oyunlarında kullanılıyor, çünkü o platformun ana dili.


14
+1 "Çoğu konsol (örneğin, 360, PS3) JVM'ye sahip değildir, bu nedenle PC sürümünden gelen kodu yeniden kullanamazsınız. Çeşitli aygıtları desteklemek için C ++ kodunu derlemek çok daha kolaydır" Aygıt çalışma zamanına sahip değilse , kullanılamayan çalışma zamanına göre geliştirilmiş oyunları göremezsiniz. Xbox 360 ve Windows telefonu .Net çalışma sürelerini yönetti, bu yüzden bunları kullanarak oyun geliştirme mümkün ve muhtemelen artan bir trend. Ancak, çalışma zamanı diğer büyük platformlarda (PS3 ve daha az ölçüde Wii) olmadığı için tamamen ayrı bir kod temeli oluşturmak gerekmiyor. Bu gerçekten bir performans sorunu değil.
JustinC

2
Şu anda .Net 2.0 çerçevesinin bir alt kümesi olan XNA olarak adlandırılıyor. Vahşi doğada başka ilginç çerçeveler var: MonoXNA, MonoTouch ve XnaTouch diğerleri arasında.
JustinC

7
Performansın tahmin edilebilirliği bir JVM ile mümkün değildir.
Klaim,

5
Çok iyi noktalar. Bununla birlikte, GC'nin öngörülemeyen duraklamalara / yüke neden olabileceği gerçeğini eklerdim. Bu sunucu uygulamaları için bir sorun değilse, gerçek zamanlı bir oyundur. Bu örneğin Minecraft'ta görülebilir.
deadalnix

2
@Klaim Ayrıca mallocya da ile mümkün değildir new, bu yüzden ne olursa olsun havuzlama yapacaksınız. Bu nokta ile ilgisi olmayan, Java ile ilgili büyük bir sorun, C # 'dan farklı olarak değer türlerini desteklememesidir.
Doval

80

Teknik sebepler:

  • En iyi 3B oyun motorlarının çoğu C / C ++ ile yazılmıştır. Oyun geliştiricilerin çoğu 3D motorlarından ödün vermek istemiyorlar, ama sıfırdan bir tane de yazmak istemiyorlar. Java açık kaynak kodlu ve gerçekten de gerçekten iyi olan jMonkeyEngine'e sahip ancak hala Unreal Engine ile rekabet edemiyor .
  • Çok nadir görülen bazı durumlar için, özellikle özel donanım özelliklerine erişim için C veya assembly dilinde "metale yakınlaşmanın" avantajları vardır . Bu günümüzde çok önemli değil, ancak profesyonel oyun geliştiricileri hala seçeneğe sahip olmak ister…
  • Java'da toplanan ve yönetilen bir çalışma zamanı var. Zamanın% 99'u bu çok büyük bir avantaj, kodlamayı kesinlikle daha kolay ve daha az hataya açık hale getiriyor ve Java'nın bu kadar popüler olmasının en büyük nedenlerinden biri. Ancak çöp toplama döngüleri olarak oyunlar için arada bir gecikme soruna neden yok olabilir farkedilir duraklamaları neden olur. Bu yeni düşük gecikmeli JVM'lerle daha az sorun olmakla birlikte, yüksek FPS'yi korumanın kritik olduğu grafiksel olarak yoğun oyunlar için hala bir sorun.

Teknik olmayan sebepler:

  • Profesyonel oyun geliştirme evleri büyük ölçüde C / C ++ becerilerine ve teknolojilerine yatırım yapıyor. Bu büyük miktarda atalet yaratır .
  • Java'nın yavaş olduğuna dair oldukça irrasyonel bir algı . 90'lı yıllarda muhtemelen doğru, kesinlikle şu anda doğru değil - kesinlikle Java ile karlı, ticari bir 3D oyun yazabilirsiniz ( Runescape Kimse? Ya Minecraft ?)
  • Java'nın oyun yerine iş uygulamalarına ve web'e odaklandığına dair oldukça adil bir algı . Bu, Mobil'in büyümesi ve daha fazla platformlar arası gelişim ihtiyacı ile birlikte değişebilir, ancak şu anda kesinlikle geçerlidir.

İlginçtir oyun geliştiricileri neden bazı iyi nedenleri de vardır gerektiğini Java göz önünde bulundurun:

  • Taşınabilirlik - hedef platformların sayısı arttıkça, Java gerçekten platformlar arası ikili dosyalar oluşturma konusunda eşsiz benzersiz bir yetenekle daha da çekici hale geliyor
  • Kütüphane ekosistemi - 3B oyun motorları hariç, Java, herhangi bir platformun genelindeki en iyi kütüphaneye sahiptir. Ağ, ses, AI, görüntü işleme, anahtar / değer veri depoları, konuyu adlandırırsınız ve bunun için muhtemelen açık kaynaklı bir Java kütüphanesi vardır.
  • Sunucu tarafı gelişimi - Java, sunucu için harika bir dildir / platformdur ve daha fazla oyun muazzam çok oyunculu öğeler içerdiğinden sunucu tarafı daha da önem kazanacaktır. Linux'ta Java, burada bir platform olarak oldukça çekici görünüyor.
  • JVM - fantastik çöp toplama, JIT derleyici, eşzamanlılık desteği vb. İle muhtemelen dünyanın en iyi tasarlanmış VM yürütme ortamıdır. Yalnızca daha iyi olacak ve oyun geliştiricileri istedikleri zaman oyunlarında dinamik dilleri kullanmaya başlayacak. mümkün olan en iyi çalışma ortamı.
  • Diğer JVM dilleri - Java sağlam bir işgücüdür, ancak asıl yenilik yeni JVM dillerinde (Scala, Clojure). Bu diller, Java / JVM platformunun tüm avantajlarından yararlanır, ayrıca son derece güçlü modern dillerdir.

19
Hayır, video oyunu dünyasında Java’da protabilite daha iyi değil. Çoğu konsolda JVM yoktur. Taşınabilirlik nedeniyle C ++ video oyun dünyasında java'ya tercih ediliyor.
deadalnix

5
Kütüphane ekosistemi Java için neden bir bonus? Ağ, ses, anahtar / değer çiftleri - bu bir şey değil; Bugünlerde her yerde avilable. Aslında AI ve görüntü işlemenin C / C ++ kütüphaneleriyle (fann, OpenCV) yapılmasının çok daha kolay olduğunu iddia ediyorum.
MrFox

4
FPS'den daha önemli, belki de tutarlı kare oranlarını vurguluyorum . Oyunumu 100FPS'de çalıştırabilirim, ancak bu karelerin bazıları yarım saniye sürerse, bu işe yaramayacak. GC hızlı olsa bile, gözle görülür düzensizliklere neden olursa, bu hala bir problemdir. (Bu Java’nın performansına özel bir şey söylemez, akılda tutulması gereken sadece genel bir sorun)
Gankro

1
Java'da ilk kişi bir tetikçi yazdım ve düşük gecikmeli bir tane kullanmadığım zamanlarda bile çöp toplayıcı ile hiç sorun yaşamadım. Her neyse, bellek Java yığınına tahsis edilmediğinde, çöp toplayıcı olmadan başa çıkmak bana kalıyor ve bellek ayak izimin çoğu VBO'lardan geliyor. Diğer bir deyişle, çöp toplama işlemi bir sorun değildir çünkü tasarlandığı amaç için kullanıldığında çalışır ve GPU'daki veya yerel öbeklerdeki (! = Java yığını) büyük nesneleri işlemek için değildir. Dişlerinizi fırçalamanın etkili bir yolu olmadığından örsü suçlamayın.
gouessej,

1
@deadalnix Video oyunu dünyası sadece konsollardan oluşmuyor.
gouessej

27

Tamam, bu konuda çok fazla yanlış bilgi var.

Oyun işini çok iyi biliyorum, 25 yıldır bu işteyim. Ayrıca oyunlarda Java'yı Sun'ın Java Oyunu teknik sorumlusu ve ders verme Java performans programlama uzmanı olarak son derece iyi tanıyorum.

İşlemsel hız açısından, Java bugün birçok bilimsel hesaplama testinde C ++ 'ı yeniyor. Her iki dilde de patolojik kod yazabilirsiniz, eğer isterseniz kötü performans gösterir, ancak hepsinden önemlisidir ve uzun zamandır.

Hafıza kullanımı açısından, Java'nın bazı genel sorunları vardır. HelloWorld, java'da bulunan 4K bir programdır. Ancak bu ek yük günümüzün multi GB sistemlerinde oldukça anlamsız. Son olarak, Java'nın başlangıç ​​zamanı daha fazladır. Java'yı, Unix komut satırı komutları gibi kısa çalışma zamanı programları için kullanmanızı tavsiye etmem. Bu durumlarda başlangıç, performansınıza hakim olacaktır. Bir oyunda, ancak oldukça önemsiz.

Düzgün yazılmış Java oyun kodu GC duraklamalarına maruz kalmaz. Tıpkı C / C ++ kodu gibi, bazı aktif bellek yönetimi gerektirir ancak C / C ++ seviyesine göre değil. Hafıza kullanımınızı ya uzun ömürlü nesnelere (tüm seviyeye veya oyuna devam eder) ve çok kısa ömürlü nesnelere (vektörler ve benzeri, hesaplamadan sonra etrafta dolanıp hızlı bir şekilde tahrip olan) kullanmaya devam ettiğiniz sürece gc görünür bir sorun olmamalıdır.

Doğrudan belleğe erişim açısından, Java bunu uzun süredir kullanıyor; Java 1.4'ten itibaren Yerel Doğrudan Bayt Tamponları biçiminde. Java'da bit bükme, imzasız tamsayı türleri olmadığı için biraz can sıkıcı olabilir, ancak iş turları iyi bilinmektedir ve korkunç derecede zahmetli değildir.

Gerçek Java hiçbir zaman Direct3D bağlayıcısına sahip olmamasına rağmen, Java teknolojilerinin taşınabilirlik için çaba harcadığı için. İKİ OpenGL ciltlemesi (JOGL ve LWJGL) ve OpenAL ciltlemesi (JOAL) ve başlık altında Windows'ta DirectInput'a, OSX'te HID Yöneticisi'ne ve bir Linux ciltlemesi (hangisini unuttuğumu) bağlayan portatif bir giriş ciltlemesi (JInput) vardır.

Hiçbir oyun motorunun Java'yı hiçbir şekilde kullanmadığını, Unity'nin C # özelliğini öne sürdüğünü ve bu bağımsız alandaki bir zayıflık olduğu doğru. Öte yandan, Windows, OSX ve Linux'ta tamamen taşınabilir bir platform olan iki iyi Scenegraph seviyesi APIS vardı. Her ikisi de Josh Slack tarafından yazılmış, ilk JMonkey motoru ve ikinci Ardor3D olarak adlandırıldı.

En iyi poster, Java'yı oyun geliştirmede geri tutan en büyük iki şeyin önyargı ve taşınabilirlik olduğu doğrudur. İkincisi en büyük sorun oldu. Bir Java oyunu yazıp, Windows, OSX ve Linux'a gönderebilseniz de, hiçbir zaman bir konsol VM olmamıştı. Bunun nedeni Sun'ın orta yönetimindeki toplam beceriksizlikti. Oyunlarda Java üzerinde çalışan birkaçımız Sony ile Playstation'da sanal makine elde etmek için en az 3 kez anlaşma yapmış ve 3 kez de Sun orta yönetimi onu öldürmüştür.

Sun, müşteri teknolojileri ile flört ederken, mesele gerçeği, Sun yönetiminin asla tüketici ürünleri elde etmemesidir. Bu nedenle Sun'ın bir istemci dili olarak Java'nın hiçbir zaman hiçbir şekilde başarılı olamadığı ve Java'yı her yerde bir platform başarısı haline getirmek için Google ve Dalvik'i (Android java benzeri VM) almasının nedeni budur.

Bu yüzden bugün oyunları C # ile kodluyorum. Çünkü Mono, Sun yönetiminin reddettiği yere gitti.


8

Java, iş mantığı, sunucular ve güvenilir bir şekilde çalışması gereken platform bağımsız kodu için mükemmeldir. Java'nın oyunlarda sıklıkla kullanılmamasının birkaç faktörü vardır:

  • sınırların kontrolü ve diğer güvenlik mekanizmaları (bugünlerde marjinal performans farkı)
  • C ++ veri yapıları ve Java veri yapıları arasında dönüştürme yapmak zorunda (sadece arabellekleri kopyalayamaz)
  • kitapların ve öğreticilerin birçoğu kalabalığı takip ediyor, bu yüzden C ++ olmayan oyun bilgisi bulmak zor
  • çekirdek grafik kütüphaneleri (DirectX ve OpenGL) ve kullanıma hazır birçok motor C / C ++ tabanlı
  • Birçok oyun mümkün olduğu kadar hızlı koşmaya çalışır, böylece görsel olarak daha çekici özellikler ekleyebilirler.

Java (bir JNI katmanı yazma) ve .net (çok sayıda marshalling / unmarshalling, api / yapı özniteliği) gibi bytecode dillerinden C ++ kitaplıklarıyla çalışmak kolay değildir. Bu yüzden küçük bir fayda için epeyce iş ekler.

Bir not: Bazı oyun sunucuları Java kullanıyor.

Burada benzer yazı : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java


JNI'yi kendiniz yazmak zorunda değilsiniz, sadece JogAmp veya benzer bir kütüphane kullanın.
gouessej,

İyi bir nokta. Java'da JOGL ve JMonkeyEngine kullandım. Daha fazla müşteri C # 'da nvorbis / naudio / openal ile DirectX için XNA / MonoGame ve OpenTK den OpenGL kullandım. Ve özellikle gölgelendiricilerle çalışırken küçükten orta boy oyunlarda harikalar. C ++ 'da üretkenlikte büyük gelişme. Sonra tek gerçek sorun herhangi GC-tabanlı dil olarak aynıdır: GC hafifletici / önlenmesi. Kare hızınızı periyodik olarak durduracak; böylece, sabit durdurulan diziler, statik ayırmalar veya oyun durduğunda atılabilecek uzun ömürlü tamponlar (menüler, yükleme, sinemalar) isteyeceksiniz.
Graeme Wicksted

JOGL’u 2006’dan beri kullanıyorum ve masaüstü ortamındaki donanımlarda bile bu tür bir sorun yaşamadım. Çöp toplayıcı suçlu değildir, çünkü en büyük nesneler genellikle GPU RAM'de veya doğal öbeklerde (tipik olarak doğrudan NIO tamponları), eskileri "normal" çöp toplama ve ikincisi " t "Java" yığınındaki Java nesnelerini ilgilendiği için doğrudan "normal" çöp toplama birimi tarafından yönetilir. Yerel öbek üzerinde ayrılan belleği etkin bir şekilde serbest bırakmak, geliştiriciye kalmıştır.
gouessej

Benim düşünceme göre, sorun, çöp toplayıcısının işini yapmasını engelleyen Java zihniyetinde olmayan programcılar tarafından hayal edilen bazı "optimizasyonlardan" kaynaklanıyor. Bazı yerel kaynaklarla bağlantılı bazı işe yaramaz Java nesneleri hakkında bazı güçlü referanslar tutarsanız, çöp toplayıcı hiçbir zaman geri kazanılabilir sayılmaz. Öbek dışı tahsisi bazı durumlarda faydalı olabilir, ancak kötüye kullanırsanız, uzun ömürlü kaynaklarınız bellekte kalır ve yeni nesneler oluşturamazsınız.
gouessej

Bazı oyun programcıları başlangıçta büyük arabellekleri ayırmayı, çalışma zamanında dilimlemeyi ve bu belleği kendi başlarına yönetmeyi tercih eder, ancak işletim sisteminin ve Java'nın yeni nesneler oluşturmak için biraz yer açmak için daha fazla zaman harcayacağından muhtemelen daha kötüsünü yapacaktır. Java'da bellek sızıntısından kaçınmak daha zor değildir ve daha uygun bir çözüm, yalnızca Java yığınında uygun bir zamanda (duraklama sırasında, bir düzeyden diğerine geçerken bunları serbest bırakmak için tahsis edilmemiş nesneleri) izlemekten oluşur. , ...), çöp toplayıcı ile ilgisi yok.
gouessej

5

Java çoğu oyun geliştirme için yeterince hızlı değildir. Standart olan C ++ / Assembly kullanmaktan çok daha yavaştır. Daha fazla oyun geliştirme C # veya VB kullanarak yapılmaması nedeni aynıdır. Oyun geliştiricileri, fizik hesaplamaları, AI mantığı ve çevre etkileşimleri gibi şeyler için ellerini ele alabilecekleri her son saat döngüsüne ihtiyaç duyuyor ve planlıyorlar.

Daha basit oyunlar için Java oldukça etkili bir şekilde kullanılabilir. Bir Tetris klonu veya Bejeweled'i veya bu ayrıntı düzeyindeki bir şeyi oluşturmak istiyorsanız, Java iyi çalışacaktır. Ancak Java muhtemelen Halo, Onur Madalyası, Komuta ve Conquer gibi oyunlar yaratamaz ve oynanabilir hale getiremez. En azından bugünlerde olduğu gibi.

Ve sorunuzda listelediğiniz sebepler de geçerlidir. Bunun dışında, Java uzmanlığına sahip oyun geliştiricilerin eksikliği yüzünden. Telefonlardaki ve diğer taşınabilir cihazlardaki pek çok oyun Java'da yazılmıştır (çoğu Android oyunları dahil) ve oyunların bazıları oldukça mükemmel. Bu yüzden Java bilgisine sahip, iyi ve büyüyen bir oyun geliştirici temeli olduğunu düşünüyorum.

Bu düşünce, daha gelişmiş oyunların bazıları için bu üst seviye dilleri kullanma yeteneğine bağlı olarak değişiyor. Mesela en sevdiğim oyunlardan biri olan Auran'ın Tren Simülatörü C # ile büyük bölümlerle yazılmış ve oldukça iyi çalışıyor. Böylece taban büyüyor ve gelişmeye devam edecek.


17
En önemli noktalardan birini dışlarsınız; Kullanılacak araçların ve API'lerin büyük çoğunluğu C ++ dilinde yazılmıştır ve Java ile çalışacak şekilde yeniden yazılmıştır. Ayrıca, "[Java] C ++ / Assembly kullanmaktan çok daha yavaş" ifadesine genellemeniz doğru olamayacak kadar geniştir. Derleme, PC oyunlarında düşündüğünüz kadar sık ​​kullanılmaz çünkü iyi bir derleyici, derleyici olarak yazacağınızdan daha verimli bir kod üretecektir. Ancak deterministik kaynak kullanımı ve donanıma tam olarak ulaşabilme kabiliyeti gereklidir.
Ed S.

15
Birisinin gerçekten Minecraft'tan daha iyi Java yetenekleri örneği oluşturması gerekiyor. Birisi Java ya da C # ile WoW ya da C&C ya da MOH ya da Starcraft'ın eşdeğerini yaratana kadar, söylediklerimi tutmaya devam edeceğim.
BBlake

12
"Derleme, PC oyunlarında düşündüğünüz kadar sık ​​kullanılmaz çünkü iyi bir derleyici, derleyici olarak yazacağınızdan daha verimli bir kod üretecektir." Bu başka bir genelleme. Tecrübeli bir IA32 assembly dili programcısından daha iyi bir IA32 makine dili üretebilecek bir derleyici görmedim. Derleyiciler, bir hedef makineye eşlenen soyut bir makine için kod üretir. Bir montaj dili programcısı, makine deyimleri de dahil olmak üzere temel işlemciden tam olarak yararlanır.
bit-twiddler

10
Hafıza kullanımını unutma. Hafıza kullanımı muhtemelen hızdan daha önemlidir. Java, C ++ ve çöp toplayıcı gibi doğrudan bellek kontrolü için tasarlanmamış, aynı görev için bellek kullanımının her zaman C ++ 'dan önemli ölçüde yüksek olduğu anlamına gelir.
Matthew

9
Bu 1985 değil. 640k'dan fazla belleğe, 50 mghz işlemciden daha iyi ve 1,44 mbs'den fazla çıkarılabilir depolamaya sahibiz. Oyun geliştiricileri bugün meydan okuyor 25 yıl öncekiyle aynı değil. Devam edin ve modern bir oyun için el yapımı x86 / veya ia64 kodunun bir örneğini bulun. Bazı mitlerin sadece düz yanlış. Buradaki zorluk taşınabilirlik ve göreceli olarak eski çalışma ortamları kullanan aşağı düzey müşteriler. En az ortak payda vs zorlayıcı daldırma.
JustinC

5

Modern oyunlar, özel amaçlı donanımda gerçekleşen 3D grafiklerle ilgilidir.

2002 yılında bile, Jacob Marner "Oyun Geliştirme için Java'yı Değerlendirmek" adlı raporunda, Java'nın performansa en çok bağımlı olan bölümler hariç, dilin ve dayanaklı JVM'nin daha ucuz olmasından dolayı oyunlarda oldukça kullanışlı olduğunu buldu. bu şekilde yapmak için.

http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

Kişisel görüşüm, o zamandan bu yana kaydedilen ilerlemeyle, özellikle 3D-grafiklerde ve OpenGL ve arkadaşlarına yapılan mükemmel bağlarla, bu dezavantajın bugünlerde daha az belirgin olduğu yönünde.

Dolayısıyla sorunun başka yerde olması gerekir. Muhtemel bir sebep, Java çalışma zamanının büyüklüğüdür (bugünlerde çoklu DVD oyunlarında daha az sorun olur) ve bir diğeri mevcut kodun ataletidir. Java'da yerel kodla çalışmaya başlamak çok meşhurdur. Üçüncü bir sebep, oyunları yapan yıldız geliştiricilerin aşina oldukları şeydir. Dördüncüsü, Java'nın platformda kullanılabilir olup olmadığıdır.

Yine de kesin olan bir şey var - çoğu oyun baştan beri C kodunda yanmak yerine, kodlu hale geliyor ve komut dosyası dilinizin altındaki en iyi çalışma zamanını istiyorsunuz. Bugünlerde bu, temel olarak CLR veya JVM anlamına gelir.


1
oddlabs.com/technology.php - "Geliştirmemizi, oyunun LWJGL destekli bir platformda herhangi bir değişiklik yapmadan ve platforma bağlı yerel kodla karşılaştırılabilir bir hızda çalıştırmasına izin veren LWJGL ve Java'nın kombinasyonuna dayandırdık."

Jake2, Quake2'yi 10 yıldan daha önce geride bıraktı. Artık 2002'de değiliz.
gouessej

4

Oyun geliştiricileri metale yakın olmak ister ve sık sık iç döngülerini montajda yazar. Java, hem tutarlı hızda hem de bellek kullanımında aynı seviyede olası performans sunmuyor (bir JIT çalıştırmak zorunluluğu alıyor).


4

Bence çoğu insan için sınırlayıcı faktör, iyi oyun motorlarının mevcudiyetidir. Çok uzaklaşmak için, neden bu kadar müsait olmadıklarına bakmamız gerekiyor.

Buna bir an için diğer yönden bakardım. Bir oyun motoru geliştirmek (örneğin) çok iş. Bunu geliştirmek için zaman ve çabayı harcayan birini geliştirmekten kim yeterince faydalanabilir?

Java için / Java için çerçeve benzeri bir gelişim için bariz adayların çoğu (örneğin, IBM, Oracle) oyunlara hiç ilgi duymuyor. Oyun gelişimi için bariz adayların (örneğin, Id, EA) Java ile neredeyse eşit derecede az ilgileri var gibi görünüyor.

Neredeyse makul olduğunu düşündüğüm tek aday Google olacaktır. Android için birincil geliştirme dili Java ve Android için oyun gelişimini teşvik olabilir platformu için gerçek bir avantaj sağlamaktadır.

Bildiğim kadarıyla, henüz (henüz?) Yapmadılar, bu da başkaları için oldukça ağır sınırlar bırakıyor. Java geliştirme geliştirmek için modern, yüksek performanslı oyun motorlarının çok az olmadan, biraz daha fazla iş anlamına gelir, (bana benziyor) bu ekstra iş karşılığında çok fazla fayda sağlamak için küçük bir umut.


Bence oyun motorlarında önemli bir konuya değindiniz - Bence bu Java'nın C / C ++ ile yetinemediği en büyük sebep. Açık kaynağın oyun alanını biraz düzeltmesi mümkündür - jMonkeyEngine ( jmonkeyengine.com ) ile çok etkilendim .
mikera

ve oyun geliştiricilerin genel olarak son derece muhafazakar olduğunu (teknik olarak) ve büyük (etkili) mağazaların çoğunun onlarca yıldır var olduğunu ve C (++) / ASM merkezli olduklarını unutmayınız. Tüm C (++) / ASM mimarisini yuvarlamaya hazır olduklarında, zamanın, paranın ve diğer kaynakların yoğun yatırım yapması anlamına gelir.
00'de

1

Asıl soru, şu satırlarda bir şeyler sormak için aynıdır:

Arabanıza, bir tekne motoruna veya jet motoruna güç sağlamak için daha iyi olan şeydir.

Ölçeklenebilirlik, hatadan kaçınma, hız, bellek imzası, modülerlik ve bir çok şey var. Soru, bir endüstri standardı olarak neyin daha iyi olduğu ile ilgili olmamalı, ne biliyorsanız veya ne kadar iyi bildiğiniz gibi “benim için neyin iyi olduğu” sorusu sorulmamalıdır. İşi yaparsa, işi yapar, fikri gerçekten satabilirseniz o zaman işe yarar ve kim bilir birkaç kaşık bile bükebilirsiniz.


0

Java oyun geliştirme düşünülerek yapılmamıştır, Java "web için" bir dil haline getirilmiştir.

Oyun geliştirmeye gelince, Sun, Java'yı Microsoft'un desteklediği C # gibi bir oyun geliştirme dili olarak desteklemedi.

Bence zorlayıcı oyun geliştirme çerçevelerinin eksikliği, Java'yı bu açıdan gerçekten öldüren şeydi.


3
Fakat C ++ ya bir oyun dili olarak yapılmamıştı, ama C gibi bir sistem programlama dili olarak ve Sun aslında Java'yı bir oyun dili olarak biraz çaba sarfetti, sanırım Java'yı PS2'ye getirmek için Sony ile işbirliği yapıyorlardı ya da bir şey, ama asla olmadı ...
Anto

1
@Phobia: Fakat sistem programlaması için tasarlandı .
Anto

1
@Phobia: Demek o olduğunu bir genel amaçlı programlama dili ++ hemen C gibi. Cevabınıza göre Java'nın bir oyun programlama dili olarak tasarlanmadığını söylüyorsunuz, ancak C ++ 'ın ya öyle tasarlanmadığını unutuyorsunuz.
Anto

2
@Joe Blow: Vikipedi sayfasından C hakkında: " C sistem yazılımı uygulamak için tasarlanmış olmasına rağmen , aynı zamanda taşınabilir uygulama yazılımı geliştirmek için de yaygın olarak kullanılır." Bence bu oldukça açık, değil mi?
Anto

2
@ Fobia Kişisel tercihleriniz için üzgünüm ama tartışma ile tamamen alakasızlar. Ayrıca, günümüzde C ++ 'ın neredeyse yalnızca uygulama programlamasında kullanıldığına itiraz etmek istemiyorum. Bu tartışmanın konusu değildi. Java'nın web programlama düşünülerek tasarlandığı iddiası. C ++, sistem programlama düşünülerek tasarlanmıştır. Tasarımcısını söylüyor. Tartışmanın sonu.
Konrad Rudolph

-1

Geleneksel olmayan donanım ve sürücüler için C'yi doğrudan yapıştırmak daha kolaydır. Bir oyun programcısı donanıma ne kadar çabuk ve yaklaşırsa, rakip oyunları o kadar iyi dışlayabilir. Daha sonra oyun programcıları daha önce kanıtlanmış oyunlarla aynı metodoloji ve araçlara bağlı kalıyorlar.

Sıradan cep telefonu oyunları gibi en son donanıma göre optimizasyonun daha az önemli olduğu oyunlar için, C'yi bu şekilde kullanmak Java'nın taşınabilirliğinden daha az önemlidir.


-4

Bazı insanlar nedense, hız, kütüphaneler veya kullanılabilirlik ile ilgisi yoktur. Bu sadece dilin kendisinden kaynaklanıyor. Bazı insanlar sadece Java dilini sevmezler. Diğer insanlar oyun yapmak için Java kullanmak yerine en sevdikleri programlama dilini kullanırlar.


Bu bir yorum gibi daha fazla okur, Nasıl
Cevaplanır

-8

Elbette başka bir şey olabilir. İşi benden daha iyi tanıyan biri, oyun geliştirme konusunda Java'nın neden hızlanmadığını açıklayabilir mi?

Bu bir tercüman dili, yani yavaş. Donanım olan grafik ve grafik kartı ile uğraşıyorsunuz. Donanımla başa çıkmak için iyi bir dil nedir? C ++, oldukça düşük ve sen işaretçilerle ve her neyse.

Crysis gibi çılgın grafikleri ve bunun için Java'yı yapmayacağınız her şeyi pompalamak istiyorsanız.

Sadece bu değil, Oracle Java'ya sahip, bir şirketin size dava açabileceği düşüncesi pek iyi değil. Özellikle JAVA'nın FUD parçalanması nedeniyle dava açmadan oyunu hedef alması için kendi tercümanınızı oluşturmak istediğinizde.


1
JIT derlemesini ciddi bir şekilde okumalısınız ve Java'nın C ++
Anto

1
Bu cevabı kim oyladı? Bütün bu soru inanılmaz derecede saçma! İyi keder.
Fattie

7
@Joe Cevap yanlış. Java yorumlanmadı.
Konrad Rudolph

3
@Anto Bu aptal kıyaslamaları unut. C ++ , Java'dan çok daha hızlı bir büyüklük siparişidir, bkz. Programmers.stackexchange.com/questions/29109/29136#29136 ve programmers.stackexchange.com/questions/368/13888#13888 .
Konrad Rudolph

1
@Anto Neye bakmalıyım? Hız? C ++. Hafıza kullanımı? C ++. Minecraft'a bakın ve bir sunucuyu barındırmayı deneyin ve oyunun ne kadar hafıza harcadığını görün. Java, C ++ 'a karşı çok daha fazla bellek tüketir. Online bir oyun yaparken, Java'da oldukça zor olduğunu tahmin ediyorum. Şimdiye kadar gördüğüm her kıyaslama Java daha fazla hafıza tüketiyor, şimdi merkezi sunucunun java'da kodlandığı bir mmorpg oyununa sahip olmak, sadece hafıza yönünü görmezden gelirseniz veya MMORPG'deki masif tanımını değiştirirseniz kulağa hoş geliyor.
efsanevi
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.