Java ciddi oyun geliştirme için uygun mu? [kapalı]


64

İnterneti araştırdım, fakat Java oyun geliştirme için çok fazla kaynak yok, C ++ kadar değil. Aslında, çoğu motor C ++ ile yazılmıştır. JMonkeyEngine ile yapılmış bir oyun oynamaya çalıştım, ancak oyun bilgisayarımın donduğu noktaya göre oldukça yavaştı. Çalışan başka Java uygulamalarım yoktu ve kaynak yoğun değildi. Buna karşılık, bilgisayarım en modern 3D oyunları kolaylıkla oynayabilir. Java'yı şimdi öğrenmeye ve geliştirmeye devam edersem ve daha sonra C ++ 'ı öğrenmem gerekeceği ortaya çıktı, geçişi zorlaştırabilir.

Java ciddi oyun gelişimi için kabul edilebilir bir dil midir? Ciddiyim, modern bilgisayarlarda fazla gecikme olmadan yüksek kaliteli grafikler demek istiyorum. Konsollar için oyunlar yapmayı da düşünmek istiyorum.


25
Minecraft java ile yapılmış değil mi? Veya ağırlıklı olarak OpenGL? Oh ve% 100 java ayarlı değilseniz, harika olduğu gibi C # kontrol edin.
Aralox

7
Neden Overflow C ++ Sohbetine gelmiyorsun? C ++ 'u seviyoruz, kesinlikle doğru kullanılabileceğini düşünüyoruz ve bunu nasıl yapacağımızı biliyoruz ve paylaşmaktan mutluluk duyarız.
DeadMG

12
Minecraft java + LWJGL + Notch'in kodlama becerileridir, yani performans açısından KORKUNÇtur.
MLProgrammer-CiM 14:12

3
Kodlama oyunlarınız ya da başka bir şey olsun, kendinizi tek bir dile kilitlemek gelecekte size yardımcı olmayacaktır. C ++ veya Python gibi başka bir şey kullanın. Zaman alıyor, ama seni daha iyi bir hale getiriyor.
loganfsmyth

4
Çok fazla yanlış bilgi edineceksiniz çünkü Java / C ++ savaşları parlak bir şekilde yanıyor, bir görüşü kabul etmeden önce özel örnekler sormaya ve ayrıca kendi başınıza daha fazla araştırma yapmaya hazır olmalısınız =) birçok dili bilmeniz gerekecek çünkü herhangi bir görev için doğru aracı seçebiliyorsunuz. Yakın gelecekte, sadece "oyun tarzı programlama" öğrenmek istiyorsanız, o zaman (Java) ile ne kullandığınızı kullanın ve daha sonra C ++ 'ı öğrenin. Heck, daha sonra C # 'daki içerik boru hatlarını ve Java ME'deki oyunları tahmin etmek zor olabilir =)
Patrick Hughes

Yanıtlar:


54

Evet, kanıt için bu listeyi kontrol edin . Bunlar, Hafif Java Oyun Kütüphanesi (LWJGL) kullanılarak Java ile yapılan oyunlardır. Yüksek kaliteli grafikler için OpenGL ve sesler için OpenAL sağlayan düşük seviyeli bir çerçevedir. Ayrıca giriş API sağlar. Bunlarla Java'da ciddi oyun geliştirmeye kolayca başlayabilirsiniz.

Şu anda ikinci 3D oyunumu Java'da bir hobi projesi olarak yazıyorum ve çok seviyorum. Geçmişte oyunumu C ++ ile yazıyordum, fakat Java'ya geçtikten sonra geri dönüş yok. Birden fazla işletim sistemini Java ile desteklemek çok kolay olabilir, örneğin bir yıl boyunca Windows'ta geliştirdiğim önceki Java oyunum Linux'ta ve OS X'te bu platformlarda herhangi bir şey derlemeye gerek kalmadan sadece tek bir hatayla çalıştı.

Öte yandan, Java ile birkaç probleminiz var.

  1. Çöp toplayıcı. Diğerlerinin de belirttiği gibi, deterministik olmayan bellek yönetimi bir sorundur ve bunu aklınızda tutmanız gerekir.
  2. 3. parti kütüphanelerinin eksikliği. Mevcut kütüphanelerin çoğu Java'yı desteklemiyor. Öte yandan, bu yerel kütüphaneleri Java'dan da çağırmak için her zaman bir seçeneğiniz vardır, ancak bunu yapmak daha fazla iştir. Ayrıca Java kütüphaneleri veya popüler kütüphaneler için hazır paketler de vardır, örneğin ben BulBul Physics Library'nin JBullet - Java portunu kullanıyorum . Öte yandan, Java, oyunla ilgili olmayan üçüncü parti kütüphanelere olan ihtiyacı azaltan yerleşik bir sınıf kütüphanesine sahiptir. Kütüphanelerin eksikliği benim için bir sorun değildi, ama bunun başkaları için de olabileceğini hayal edebiliyorum.
  3. Java popüler oyun konsolları tarafından desteklenmiyor ve bildiğim kadarıyla Java olanlarına kolay bir geçiş yok. Öte yandan popüler bir mobil platform olan Android, bir tür Java kullanıyor. Bu aynı zamanda bir seçenektir, ancak hem PC hem de Android cihazında çalışmak için aynı Java kodunu hariç tutmuyorsunuz.
  4. Daha küçük topluluk Oyun programcılarının çoğu C ++ kullanıyor ve benim deneyimlerime göre genellikle Java'dan hoşlanmıyor. Başkalarından bu kadar yardım almayı beklemeyin. Oyun geliştirmede C ++ becerisi olmadan iş bulmayı beklemeyin.

40

Pek sayılmaz. İşte mesele - ilk olarak, Java için varolan kütüphaneler açısından C ++ ile ilgili neredeyse her şeye kıyasla çok az şey var.

İkincisi, bir dil olarak Java oyun geliştirme konusunda kendini iyi ödünç vermez. Örneğin, GPU arabellekleriyle ilgileniyorsanız, Java doğru kilitlenmelerini sağlamada size yardımcı olacak bir dil özelliği sağlamaz. C ++ 'ın yaptığı, kilidi açılmış veya elden çıkarılmış. Artı, performans sorunu var - ve GC belirleyici değil, oyun için süper kötü.

Yürütmeden önce yerel yasaya göre derlenmemiş bir dilde çok fazla zaman harcayan herhangi bir indie olmayan oyun ve hatta nadir görülen bir indie oyun bile görmedim. Bu yüzden şu an benim inancım, sadece yapılamayacağıdır.

Ayrıca, şimdi Java'yı öğrenmeye ve geliştirmeye devam edersem ve daha sonra C ++ 'ı öğrenmem gerekeceği ortaya çıktı, bu geçişi zorlaştıracak mı?

Evet, kesinlikle olacak. Java ve C ++, yüzeysel sözdizimsel benzerliklerine rağmen oldukça farklıdır. Java deneyimi, C ++ öğrenirken neredeyse hiçbir şeyden sayılmaz.

Grafiklerin üzerine Oynanış olan kalıcı bir seçim ve Terarria ve Minecraft gibi oyunlar başarısında görebilirsiniz. Ama srs grafikleri oluşturmayı düşünüyorsanız, o zaman Java ile yapılamayacak.


6
Ağır grafikler belirttiğinden beri +1, gecikmeden hızlı oyun oynadı.
Joshua Drake

1
Java'nın imzasız veri türü eksikliği de buna karşı duruyor. Evet, bunun üzerinde çalışabilirsiniz, ancak bu ideal değildir ve temel verileri doğru şekilde yansıtmayan bir kod kullanıyorsunuzdur.
Maximus Minimus

@deadmg Kilitli ve kilidi açık mı , bazı DirectX api işlevselliğine mi bakıyorsunuz ? - Bana deterministik olmayan GC'ye sahip olmanın nesi kötü diye söyleyebilir misiniz?
Quazi Irfan

Deterministik olmayan GC, düşmekte olan karelere eşdeğer olabilir, eğer dünyayı duraklatırsanız ve durdurursanız, kareyi işlemek için gerekenden daha uzun süre kilitler. Uygulamada, bellek kullanımınızı planlıyorsanız, bu gerçekten sık sık olmaz, JVM'nin toplayıcıları düşük duraklama için yapılandırılabilir (çerçeve bırakma için güvenli sınırlar dahilinde). Yine de, uğraşılması gereken eğlenceli bir şey değil. C ++ 'dan ayrıldığınızda elde ettiğiniz üretkenliğin önemli miktarlarını geri vermek zorunda kalırsınız.
Michael

2
Tamamen yeniden yazmak zorunda kalacaksınız.
DeadMG

25

Yani, oyun geliştirme konusunda gerçekten ciddiyim, Java hala uygun bir seçim mi? C ++ 'ı öğrenmek için defalarca denedim, fakat dili gerçekten sevmiyorum. Nedenini gerçekten bilmiyorum ama genellikle ne zaman öğrenmeye çalışırsam, konuları asla anlayamıyorum.

Java'yı seçme nedeniniz C ++ 'ı anlayamıyorsanız, Java programlarınız yüksek kaliteli grafikler için yeterince hızlı olmayacaktır. Daha yüksek seviyeli bir dil kullanmak, sizi daha üretken kıldığından, daha düşük seviyeli dili anlayamadığınız için olmalıdır.

Java'da oyun yazmanın tamamen kötü bir fikir olduğunu sanmıyorum, özellikle de oyun basitse, ama eğer bir koltuk değneği olarak kullanıyorsanız Java'da performans sorunlarıyla hemen karşılaşacaksınız.

Yani, kısacası, ciddi oyun gelişimi için Java ciddi olarak ele alınabilir. Bu, ağır grafikler, gecikmeden hızlı oyun oynama ve muhtemelen konsollara kolay geçiş yapmayı içeriyor mu?

  1. Ağır Grafikler: Mümkün, ancak Java / LWJGL'de C ++ / GL'de olduğu gibi aynı şeyi yapacaksınız: GPU arabelleklerine bayt yazma ve / veya Minecraft'ın yaptığı gibi kullanım dışı ekran listelerini kullanma. Bellek yönetimini anlamıyorsanız, bunu doğru şekilde yapmayacaksınız.

  2. Gecikmeden hızlı oyun oynama: Hiçbir dilde kolay bir iş değildir ve düşünce yapmadan kendinizi yaya olarak vurmanız daha olasıdır.

  3. Hayır, Java konsollarda kullanılamayacak.


Bir yan soru olarak, kullanım listesinin kullanımdan kaldırıldığı zaman yerini ne değiştirdi?
Suds

@Suds: Programlanabilir boru hattı, inanıyorum.
DeadMG


Mobil platformlar konsol olarak kabul edilebilir. Muhtemelen büyük üçünden bahsettiğini fark ettim, ancak Android Java kullanıyor ve bunun için pek çok oyun yaratılıyor.
Amplify91

1
@ Amplify91 evet bir kaç oyun java'da android için yazılmıştır. Ancak en iyi oyunlar ve muhtemelen tüm grafik yoğun veya çoklu platform oyunları Android NDK kullanılarak C ++ dilinde yazılmıştır.
Çakal

15

Deneyimli bir programcı genellikle birçok programlama dilini bilecektir - ekstra programlama dilleri öğrenmek, birini iyi tanıdığınızda çok zor olmaz. Bununla birlikte, C ++ 'ın ilk diliniz değil, muhtemelen ikinci diliniz olmamasını şiddetle tavsiye ederim.

Bunun nedeni C ++ 'nın önemli bir çalışma zamanı hata kontrolü yapmama konusundaki etkinliğinin büyük bir kısmını almasıdır. Örneğin, bir dizinin sonundaki Java'dan bir öğeye erişmek, programcıya tam olarak neyin yanlış olduğunu söyleyen bir istisna atar. C ++ 'ta şanslı olabilirsiniz ve hemen çökecek, ancak çok sık olarak diğer bazı verileri sessizce çöpe atacak ve hata çok daha sonra görünmeyecektir .

Şimdilik Java'ya sadık kalmanı öneririm (veya istersen C # 'a geç). Bu, işleri C ++ kullanarak daha hızlı halletmenizi sağlayacak ve bir PC'deki performans sorun olmamalı.

Daha güvenli dillerde birkaç proje tamamladıktan sonra C ++ öğrenmeyi düşünün. C ++ çoğu profesyonel oyun geliştirme işi için ihtiyaç duyacağınız şeydir.

C # / XNA dışında en azından bir konsola yazdığınız bir oyun almak dışında bir şirket kurmanızı, bir ofis kurmanızı ve geliştirme donanımı ve diğer giderler için uygun bir bütçeye sahip olmanız gerektiğini unutmayın.


Bu aynı zamanda son derece doğrudur çünkü C ++ dışındaki diğer diller size bir başarı hissi verecektir. C ++ hiçbir şey hissetmediği için yüzlerce saat sürebilir. Önce diğer dilleri öğrenmek, ayağınızı ıslatmanızı sağlar.
Darkenor

Hata işlemenin yetersiz kalmasıyla ilgili yorumlarınız gerçekten C (ve gerçekten C olan C ++ kodu) ile ilgilidir. C ++, tanımladığınızdan çok daha iyi hata işleme sahip standart kitaplıklara (ve standart şablon kitaplıklarına) sahiptir. C ++ ayrıca düzgün hata işleme sağlayan satıcı tarafından sağlanan kitaplıklara (MFC gibi) sahiptir.
Jasper,

9

Yasal Uyarı: Bu, sorunuza tam olarak cevap vermiyor. Ancak, sizi ilgilendirebilecek bazı noktalardan (kısaca) bahsetmeye çalıştım.

C ++ hakkında bu kadar çok şey görmenizin nedeni, C ++ 'nın endüstri standardı olması - konsollar için en yaygın dil vs.

Java sık kullanılmıyor. Minecraft, Java ile büyük yapan oldukça popüler bir oyundur; ama grafiksel olarak o kadar iyi değil. Spiral Şövalyeleri fena değil - aynı zamanda Java'da önemli grafiklerle yapılmış.

Java'yı seviyorsanız, C #, sözdiziminde çok benzer, C ++ ile birlikte çalışabilme avantajına sahiptir - bu nedenle düşük seviyeli şeyler gerekliyse C ++ ile yapılabilir. Birlik, C # komut dosyası için kullanabilir ve XNA mükemmel bir seçimdir.

Yine, Java yaygın olarak kullanılmamaktadır. Stili ve sözdizimini seviyorsanız, C # 'yı çok benzer, çok hoş bir kodlama deneyimi olarak bulacağınızı düşünüyorum.

Umarım hayalleriniz başarılı olur, yol boyunca çok eğlenceli :)


8
Bu yayınlarda pek çok yanlışlık var. Minecraft "kötü" grafikler (yoğun) dil ile ilgili değildir. MC'nin kötü performansı, Java'nın oyunlar için kötü bir dil olmasıyla doğrudan ilgilidir, çünkü BÜYÜK performans sorunları ve LWJGL aynı nedenle büyük kodlama projeleri için uygun olmayan bir kütüphanedir. Fakat en büyük faktör, Notch'in yavaş kodlanan ... kötü kodlama ve uygulamasından kaynaklanıyordu. C #, Java performans sorunlarının çoğunu kullanmadan yönetilen belleğin tüm artışlarını sağlar. Dezavantajı C # hem oyunlar hem de uygulamalar için yoğun bir şekilde Microsoft merkezli olmasıdır.
MLProgrammer-CiM

2
@EfEs: Size vermekten nefret ediyorum, ancak yönetilen bellek oyunlar için çok korkunç ve XNA'da oyunları kodlayan insanlar C ++ 'da kodlayan kişilere göre belleği yönetmek için daha fazla zaman harcamak zorundalar. GC'nin deterministik olmayan doğası, pratikte her şeyi havuzlamanız ve dilin kullanılması gerektiği şekilde değil veba gibi tahsisattan kaçınmanız gerektiği anlamına gelir.
DeadMG

Bu cevabın% 100 doğru olması amaçlanmadı; Sadece belli belirsizce tanıdığım örnekleri verdim. DV'ye çekinmeyin.
ashes999

2
@DeadMG C ++ 'un gideceği yol olduğunu biliyorum, sadece C #' nın oyunlar için Java 'dan daha iyi olduğunu açıklamaya çalışıyordum.
MLProgrammer-CiM 14:12

5
Uzun zamandır C # geliştiricisi olmak (oyun geliştiricisi düşünmüyor) Havuzlama ve hafıza yönetiminin kötü tasarlanmış herhangi bir sistem için harika konular olduğuna inanıyorum. C / C ++ zihniyetine ve tanıdığım gelişim yollarına sahip insanlar, kullanılması gereken yönetilen hafızaya, tasarım ve mimari yapılara pek de giremiyor ve Java / C # gibi bir dilde faydalanıyorlar. Söylemeye çalıştığım, C / C ++ tekniklerinin veya ürünlerinin kötü olduğu değil, ancak sözdizimi açısından daha basit diller kullansanız (Java ve C # gibi) olsa bile, oyununuzu doğru bir şekilde tasarlamak için çok fazla deneyime ihtiyacınız var. yol.
Ivaylo Slavov 15:12

3

Bu sorunuza cevap vermiyor; Grafik ve konsol sorunları, göz önünde bulundurmanız gereken çok şey gibi görünüyor. Ayrıca GC performansı etkiler. Ama hakkında yazdıklarım:

Büyük, karmaşık, OO programları yazıyorsanız, bunları Java'da C ++ 'dan 5 kat daha hızlı yazacaksınız. Ayrıca, bakım çok daha kolay olacaktır. Anahtar değiştirdim (kuşkusuz oyun yazılımı için) ve verimliliğim arttı. C #, başka iyi bir alternatif, Java'dan daha zor öğrenmesi çünkü çok daha fazlası var. Bildiğiniz zaman, Java'dan daha hızlı kod yazabilirsiniz; Size birçok püf noktası sunuyor. Ancak, bu numaraların bakımı zorlaştırabildiğini düşünüyorum. Daha sonra, Sun kütüphanelerinde ve kendi eski kodunuzda yardımcı olan bir Java doktoru var . C # hiçbir şeyden hoşlanmaz.

Java'da kıllı bir oyun yaptım ve dili mükemmel buldum, ancak grafiklerim basitti ve saniyenin onda birinin oyuncuların sonsuzluğunun olduğu bir atıcı değildi. Ayrıca, daha sonra buna çok şey eklemeyi umuyorum, oysa çoğu insanın gidip yeni bir oyun yazdığını düşünüyorum.


3

Bak dostum, "Java oyun dev için uygun mu" için basit bir cevap açık bir evet. Oyun yapmak için herhangi bir programlama dilini kullanabilirsiniz. Bu yapman gerektiği anlamına gelmez .

Muhtemelen sizi C ++ 'dan ayıran şeyler (düşük seviyeli bellek yönetimi, çöp toplayıcı yok, işaretçilere dikkat etmek zorundasınız, diziler gibi yapılar vb.) Bir bilgisayarın kaynaklarını en iyi şekilde kullanmak istiyorsanız, öğrenmeniz gereken şeyler. . Bilgisayarın kaynaklarını en verimli şekilde kullanıyorsanız, oyunlarınız en iyi şekilde çalışır.

Java, daha yavaş çalışmasını sağlayan bazı şeyler yapar (dizi sınırları denetimi gibi). Gelen bu optimize Java Perlin gürültü örnek kod, yazar "(dizi erişim üyesi erişimi çok daha yavaştır)" yorumunu yaptı. Bu tür bir şey bir C ++ arkaplanından gelen oldukça sezgiseldir. Fakat Java'da böyle şeyler var.

Kurşundan kaçmayı bırak, C ++ 'ı öğren ve kullan.


1

Oyun tasarımını vurgulayan, Bilgisayar Bilimi alanında resmi bir eğitim (Lisans Derecesi?) Alabilene kadar en iyi bildiğiniz dilde yapmalısınız. Oyununuzu burs almak için kullanabilirsiniz, özellikle “Java’da herhangi bir resmi eğitim olmadan yaptım” diyebilirsiniz.

Modern JVM'ler, hatta Oracle'dan bile olsa, insanların buraya getirdiği endişeleri gidermek için birçok özelliğe sahiptir. Daha deterministik çöp toplayıcı davranışları elde etmek için farklı çöp toplayıcıları kullanabilirsiniz. 3B kitaplıklarla ilgili kapsamlı bir deneyimim yok - yalnızca biraz Java3D ile - ancak buradaki hiç kimse onlardan şikayetçi görünmüyor. Kaçış analizi şimdi kilit seçimi ve çok kısa ömürlü nesnelerin çok daha hızlı / önemsiz tahsis edilmesine izin veriyor.

Sorun şu ki, C ++ Java'yı seçip seçmemeniz gerektiği, eşzamanlılığı nasıl doğru kullanacağınızı ve iyi bir bellek yönetimi anlayışına sahip olduğunuzu öğrenmek zorunda kalacaksınız. İle Tüm bunlardan sonra, aynı kolaylıkla berbat edebilir mallocsizinle olabildiğince new. Araçların C ++ için nasıl bir şey olduğunu bilmiyorum, ancak Java profil oluşturma araçlarının kullanımı kolay, ücretsiz ve IDE ile tümleşik olması oldukça kolaydır. Bunları performans sorunlarını izlemek ve öğrenmek için kullanabilirsiniz .


5
CS'deki örgün eğitim, herhangi bir disiplindeki gerçek programlama becerileri için çok değerlidir. Biliyorum, üçüncü yılımdayım.
DeadMG

4
DeadMG'ye kesinlikle katılmıyorum. Sevdiğim ve mezun olduğum dersleri alan CS, oyun geliştirme yetkilerimi% 10 ile% 100 arasında aldı. Bana UI, ikonografi vb. Öğretmedi ama gerçek, gerçek kodlama.
ashes999

2
@ ashes999: Sonra şanslısın. Kursum değersiz ve aynı hisseden başkalarının da olduğunu biliyorum.
DeadMG

2
@DeadMG okurken görmek zor. Birkaç yıl F / T çalışıp diğer ücretsiz becerileri öğrendikten sonra göreceksiniz. Yaptım. Ama belki de çok dikkat ettim ve her şeyi oyun hobime uyguladım.
ashes999

1
Bunun okula ve profesöre bağlı olduğunu söyleyebilirim. Bir ton öğrendiğim birkaç harika programlama dersim vardı; ve katılarak bilgiyi kaybettiğimi hissettiğim bir yer vardı. Her şey iyi bir profesöre sahip olsun ya da olmasın. IMO.
Nate
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.