it-swarm.asia

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

Ben bir oyun geliştiricisi ya da hiçbir şey değilim, ama biliyorum Java oyun geliştirme için çok yaygın kullanılmıyor. Java çoğu oyun için yeterince hızlı olmalı Peki, yakalama nerede? Bazı nedenleri düşünebilirim:

  • Java uzmanlığına sahip oyun geliştiricilerinin olmaması
  • İyi oyun geliştirme çerçevelerinin eksikliği
  • Programcılar Java bir oyun programlama dili olarak kabul etmek istemezler.Birçoğu sadece C++ kabul eder mi?
  • Oyun konsolları için destek yok (PC pazarı hala mevcut olsa da)

Elbette başka bir şey olabilir. İşletmeyi benden daha iyi bilen biri, oyun geliştirme konusunda neden Java ivme kazanmıyorsa) açıklayabilir mi?

81
Anto

Birkaç neden:

  • Eski günlerde, performans ve kullanıcı arayüzü için "doğrudan erişime" ihtiyacınız vardı. Bu VM Java ve C # gibi dillerden önce gelir).
  • Çoğu konsolun (ör. 360, PS3) JVM'si yoktur, bu nedenle PC sürümündeki kodu yeniden kullanamazsınız. Çeşitli cihazları desteklemek için C++ kodunu derlemek çok daha kolaydır.
  • Ana akım oyun motorlarının çoğunda (örneğin, Unreal) C++ bağları bulunur. Bazı Java bağlayıcılar (ör. OpenGL için) vardır, ancak buna benzer bir şey yoktur.
  • PC oyunları için, DirectX'in gerçekten güçlü Java desteği (hiç değilse) yoktur.
  • Web tabanlı oyunlar JavaScript veya Flash ile çalışır. GWT gibi şeyler kullanarak bunları Java) yazabilirsiniz.
  • İPhone bir Objective-C varyantı çalıştırıyor.

Java esas olarak Android oyunlarda kullanılmaktadır, çünkü bu platformun ana dili budur.

95
Uri

Teknik nedenler:

  • En iyi 3D oyun motorlarının çoğu C/C++ ile yazılmıştır. Çoğu oyun geliştiricisi 3D motorlarından ödün vermek istemiyorlar, ancak sıfırdan yazmak istemiyorlar. Java açık kaynak olan jMonkeyEngine vardır ve aslında gerçekten iyi ama yine de hala rekabet edemez Gerçek dışı Motor .
  • Çok nadir bazı durumlarda, C veya Montaj dilinde "metale yakın" elde etmenin, özellikle özel donanım özelliklerine erişim için avantajları vardır. Bu, günümüzde o kadar önemli değil, ancak profesyonel oyun geliştiricileri hala seçeneği var .....
  • Java'nın toplanmış çöpleri , yönetilen çalışma zamanı vardır. Zamanın% 99'u bu büyük bir avantajdır, kesinlikle kodlamayı daha kolay ve daha az hataya açık hale getirir ve Java çok popüler olmasının en büyük nedenlerinden biridir. Ancak arada bir gecikmeye neden olur) çöp toplama döngüleri olarak oyunlar için sorun can belirgin duraklamalara neden olur. Bu, yeni düşük gecikmeli JVM'lerde daha az sorun olmakla birlikte, yüksek FPS korumanın kritik olduğu grafik olarak yoğun oyunlar için hala bir sorundur.

Teknik olmayan nedenler:

  • Profesyonel oyun geliştirme evleri C/C++ becerileri ve teknolojilerine yatırım yapmaktadır. Bu çok miktarda atalet oluşturur.
  • Büyük ölçüde irrasyonel algı Java yavaştır. 90'larda muhtemelen doğrudur, kesinlikle şimdi doğru değil - kesinlikle Java ( Runescape kimse ile karlı, ticari bir 3D oyun yazın? Ya da Minecraft ?)
  • Java oyundan ziyade iş uygulamalarına ve web'e daha fazla odaklanan güzel adil bir algı . Mobil'in büyümesi ve daha fazla platformlar arası geliştirme ihtiyacı, ancak şu anda kesinlikle doğrudur.

İlginçtir ki, oyun geliştiricilerinin gerekir Java'yı dikkate almasının bazı iyi nedenleri de vardır:

  • Taşınabilirlik - hedef platformların sayısı arttıkça, Java benzersiz bir yetenekle daha da çekici hale geliyor gerçekten platformlar arası ikili dosyalar oluşturma
  • Kütüphane ekosistemi - 3D oyun motorlarının çok önemli bir istisnası dışında, Java genel olarak en iyi kütüphanelere sahiptir. Ağ, ses, AI, görüntü işleme, anahtar/değer veri depoları, konuyu adlandırırsınız ve muhtemelen açık kaynak kodlu bir Java kitaplığı vardır).
  • Sunucu tarafı geliştirme - Java sunucu için harika bir dildir/platformdur ve daha fazla oyun kitlesel çoklu- oyuncu tarafı sunucu tarafı giderek daha önemli hale gelecektir. Java burada bir platform olarak oldukça çekici görünüyor.
  • JVM - muhtemelen en iyi tasarlanmış VM fantastik çöp toplama, JIT derleyici, eşzamanlılık desteği vb. Sadece daha iyi olacak ve oyun geliştiricileri, oyunlarında giderek artan bir şekilde dinamik dilleri kullanmaya başladıkça, mümkün olan en iyi çalışma zamanı ortamını isteyecekler.
  • Diğer JVM dilleri - Java sağlam bir od iş atı, ancak gerçek yeni JVM dillerinde inovasyon gerçekleşiyor (özellikle Scala, Clojure) Bu diller Java/JVM platformunun tüm avantajlarından yararlanıyor, plus son derece güçlü modern dillerdir.
81
mikera

Tamam, bu iş parçacığında çok fazla yanlış bilgi var.

Ben oyun iş biliyorum son derece iyi, 25 yıldır. Ayrıca Sun'ın Java Oyun teknik evangelist ve ders Java performans programlama uzmanı son derece iyi oyunlarda Java biliyorum.

Hesaplama hızı açısından, Java bugün birçok bilimsel hesaplama ölçütünde C++ 'ı geçmektedir. İsterseniz kötü performans gösteren her iki dilde de patolojik kod yazabilirsiniz, ancak genel olarak, eşittir ve uzun süredir kullanılmaktadır.

Bellek kullanımı açısından, Java üzerinde bazı genel değerler vardır. HelloWorld, Java'da 4K bir programdır. Ancak bu ek yük günümüzün çoklu GB sistemlerinde oldukça anlamsız. Son olarak, Java daha fazla başlatma süresine sahiptir. Unix komut satırı komutları gibi kısa çalışma zamanı yardımcı programları için Java kullanmanızı önermem. Bu durumlarda başlangıç ​​performansınıza hakim olacaktır. Ancak bir oyunda, bu oldukça yetersiz.

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++ seviyesi gerektirmez. Hafıza kullanımınızı uzun ömürlü nesnelere (tüm seviye veya oyun için devam) ve çok kısa ömürlü nesnelere (vektörler ve benzeri, hesaplandıktan sonra etrafta hızla yok edilen) sakladığınız sürece gc görünür bir sorun olmamalıdır.

Doğrudan belleğe erişim açısından, Java uzun bir süredir buna sahiptir; Java 1.4, Yerel Doğrudan Bayt Tamponları biçiminde. Java içindeki bit döndürme, imzasız tamsayı türlerinin olmaması nedeniyle biraz can sıkıcı olabilir, ancak çalışma turlarının hepsi iyi bilinir ve çok zahmetli değildir.

Gerçek Java hiç Direct3D bağına sahip olmasa da, Java teknolojileri taşınabilirlik için çaba sarf ettikleri için. İKİ OpenGL bağlaması (JOGL ve LWJGL) ve OpenAL bağlaması (JOAL) ve başlık altında Windows'ta DirectInput, OSX'te HID Manager ve bir Linux bağlaması (hangisini unuttuğumu) bağlayan taşınabilir bir giriş bağlaması (JInput) vardır.

Tam bir oyun motorunun Java, Unity dediği gibi C # özelliği olmadığı ve bu bağımsız alanda bir zayıflık olduğu doğrudur. Öte yandan, Windows, OSX ve Linux'ta tamamen platform taşınabilir olan iki iyi Sahne Alanı seviyesi APIS vardı. Her ikisi de Josh Slack tarafından yazılan, ilki JMonkey motoru ve ikinci Ardor3D olarak adlandırıldı.

En iyi poster, oyun geliştirmede Java tutan en büyük iki şeyin önyargı ve taşınabilirlik olduğu doğrudur. İkincisi en büyük sorundu. Bir Java oyunu yazıp Windows, OSX ve Linux'ta gönderebilseniz de, konsol konsolu hiç yoktu. Bu, Güneş orta yönetimindeki toplam beceriksizlikten kaynaklanıyordu. Oyunlarda Java üzerinde çalışan birkaçımız, Sony ile PlayStation'da VM elde etmek için en az 3 kez anlaşma yaptı ve Sun orta yönetiminin 3 katı da onu öldürdü.

Sun, istemci teknolojileriyle flört ederken, konunun gerçeği, Sun yönetiminin hiçbir zaman tüketici ürünlerine sahip olmadığıdır. Bu yüzden Sun'ın bir istemci dili olarak Java hiçbir şekilde başarılı olamadı ve neden Androidyapmak için Google ve Dalvik'i (Java Java benzeri VM) aldı? _ her yerde bir platform başarısı.

Ve bu yüzden bugün C # 'da oyunları kodluyorum. Çünkü Mono, Sun yönetiminin reddettiği yere gitti.

29
user430788

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

  • sınır kontrolü ve diğer güvenlik mekanizmaları (günümüzde marjinal performans farkı)
  • c ++ veri yapıları ve Java veri yapıları arasında dönüştürme yapmak zorunda kalmanız (yalnızca arabellekler arasında belleği kopyalayamazsınız)
  • kitapların ve öğreticilerin çoğu kalabalığı takip ediyor, bu yüzden C++ olmayan oyun geliştirici bilgilerini bulmak zor
  • çekirdek grafik kütüphaneleri (DirectX ve OpenGL) ve pek çok hazır motor C/C++ tabanlıdır
  • birçok oyun mümkün olduğunca 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/structure öznitelikleri) gibi bayt kodu dillerinden C++ kütüphaneleriyle çalışmak kolay değildir.) küçük bir fayda için biraz iş.

Yan not: Bazı oyun sunucuları Java kullanır.

Burada benzer yayın : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java

9
Graeme Wicksted

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

Daha basit oyunlar için Java oldukça etkili bir şekilde kullanılabilir. Bir Tetris klonu veya Bejeweled veya bu ayrıntı düzeyindeki başka bir şey oluşturmak istiyorsanız, Java iyi çalışır. Ancak Java Halo, Onur Madalyası, Command & Conquer ve benzeri oyunlar oluşturamaz ve oynanabilir hale getiremez. En azından günümüzde olduğu gibi.

Sorunuzda listelediğiniz nedenler de geçerlidir. Bence, Java uzmanlığına sahip oyun geliştiricilerinin olmaması. Telefonlardaki ve diğer taşınabilir cihazlardaki birçok oyun Java (çoğu Android oyun dahil) ile yazılmıştır ve bazı oyunlar oldukça mükemmeldir. Bence Java bilgisine sahip iyi ve büyüyen bir oyun geliştiricileri tabanı var.

Bazı daha gelişmiş oyunlar için bu üst düzey dilleri kullanma yeteneği değişiyor. Örneğin, en sevdiğim oyunlardan biri olan Auran'ın Tren Simülatörü, C #'da büyük bölümlerle yazılmış ve oldukça iyi çalışıyor. Böylece üs büyüyor ve gelişmeye devam edecek.

5
BBlake

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

2002 yılında bile, Jacob Marner raporunda "Değerlendirilmesi Java" = Java en performansa bağlı olanlar hariç oyunlar için oldukça kullanılabilir) buldu dilin sağlamlığı ve altta yatan JVM nedeniyle bu şekilde yapılması daha ucuzdu.

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

Benim kişisel görüşüm, özellikle 3D grafiklerde gerçekleşen ilerlemeyle ve OpenGL ve arkadaşlarına mükemmel bağlarla, bu dezavantajın bugünlerde çok daha az belirgin olduğu.

Dolayısıyla sorun başka bir yerde olmalıdır. Muhtemel bir neden Java çalışma zamanı (bu günlerde çoklu DVD oyunlarında çok daha az sorun)) ve bir diğeri mevcut kodun ataletidir. Çalışmaya başlamak çok kırılgandır. Üçüncü neden, oyunları yapan yıldız geliştiricilerin aşina oldukları şeydir. Dördüncüsü ise Java platformda kullanılabilir olup olmadığı).

Yine de bir şey kesin - çoğu oyun baştan beri C kodunda yanmak yerine komut dosyası haline getiriliyor ve komut dosyası dilinizin altında en iyi çalışma zamanını istiyorsunuz. Bu günlerde bu esasen CLR veya JVM anlamına gelir.

5
user1249

Oyun geliştiricileri metale yakın olmayı severler ve genellikle sıkı iç döngülerini Meclise yazarlar. Java hem tutarlı hız hem de bellek kullanımı açısından aynı düzeyde olası performans sunmaz (bir JIT çalıştırmak ücretlidir).

4
dan_waterworth

Çoğu insan için sınırlayıcı faktör, iyi oyun motorlarının kullanılabilirliği (eksikliği) olduğunu düşünüyorum. Çok ileri gitmek için, bunların neden mevcut olmadığına bakmamız gerekiyor.

Bir anlığına diğer yönden bakardım. Bir oyun motoru geliştirmek (örneğin) bir lot iştir. Bunu yapmak için zaman ve çaba harcamak için birini geliştirmekten kim yararlanabilir?

Java (ör. IBM, Oracle)) içindeki çerçeve benzeri geliştirme için açık olan adayların çoğunun oyunlara hiç ilgisi yok gibi gözükmektedir Oyun geliştirme için açık adayların (ör. Id, EA) ) Java ile neredeyse aynı derecede ilgi görmemektedir.

Neredeyse düşünebileceğim neredeyse sadece aday Google olurdu. Android için birincil geliştirme dili Java'dır ve Android olabilir için oyun geliştirmeyi teşvik etmek platform için gerçek bir avantaj sağlar).

Bildiğim kadarıyla, henüz yapmamışlar (henüz?), Bu da neredeyse herkes için oldukça ciddi sınırlar bırakıyor. Java] üzerinde geliştirme kullanmak için modern, yüksek performanslı oyun motorları yolunda çok az olmadan, (bana nasıl görünüyor gibi) bir sürü üretmek için küçük bir olasılık ile biraz fazladan iş anlamına gelir bu ekstra iş karşılığında kazanç.

4
Jerry Coffin

Soru şu satırlarda bir şey sormaktır:

Arabanıza, bir tekne motoruna veya jet motoruna güç vermek daha iyidir.

Ölçeklenebilirlik, hatadan kaçınma, hız, bellek imzası, modülerlik ve bir sürü şeyle ilgilidir. Soru, bir endüstri standardı olarak neyin daha iyi olduğu hakkında olmamalı, bildiklerinizde veya ne kadar iyi bildiğinizde "benim için daha iyi olan" olmalıdır. İşi yaparsa işi yapar, eğer fikri gerçekten satabiliyorsanız, o zaman işe yarar ve kim bilir birkaç kaşık bile bükebilir.

1
Meh

Java, oyun geliştirme düşünülerek yapılmadı, Java "web için bir dil" yapıldı.

Oyun geliştirmeye gelince, Sun gerçekten desteklemiyor Java Microsoft'un C # desteklediği gibi bir oyun geliştirme dili olarak.

Zorlu oyun geliştirme çerçevelerinin eksikliği gerçekten öldürülen şeydir Java bu açıdan).

0
Mahmoud Hossam