Apakah Java layak untuk pengembangan game yang serius? [Tutup]

64

Saya telah menjelajahi internet, tetapi tidak ada banyak sumber daya untuk pengembangan game Java, tidak sebanyak C ++. Bahkan, sebagian besar mesin ditulis dalam C ++. Saya mencoba memainkan permainan yang dibuat dengan jMonkeyEngine, tetapi permainan itu sangat lambat, ke titik di mana komputer saya membeku. Saya tidak punya aplikasi Java lain yang berjalan, dan tidak ada sumber daya yang terlalu intensif. Sebaliknya, komputer saya dapat memainkan sebagian besar game 3D modern dengan mudah. Jika saya terus belajar dan meningkatkan Java sekarang, dan ternyata nanti saya diminta untuk belajar C ++, membuat peralihan mungkin sulit.

Apakah Java bahasa yang dapat diterima untuk pengembangan game yang serius? Yang serius, maksud saya grafis berkualitas tinggi, tanpa banyak lag di komputer modern. Saya juga ingin mempertimbangkan membuat game untuk konsol.

tehtros
sumber
25
Bukankah minecraft dibangun dengan java? Atau terutama OpenGL? Oh, dan periksa C # jika Anda belum menetapkan 100% di java, karena mengagumkan.
Aralox
7
Mengapa Anda tidak datang ke Obrolan Stack Overflow C ++? Kami menyukai C ++, kami pikir ini benar-benar dapat digunakan dengan benar, dan kami tahu bagaimana melakukannya, dan kami akan sangat senang untuk membagikannya.
DeadMG
12
Minecraft adalah keterampilan pengodean java + LWJGL + Notch, jadi kinerja-bijaksana itu TERRIBLE.
MLProgrammer-CiM
3
Entah itu permainan koding atau apa pun lainnya, mengunci diri dalam satu bahasa tidak akan membantu Anda di masa depan. Bercabang sedikit, baik C ++ atau yang lain seperti Python. Memang butuh waktu, tapi itu membuatmu menjadi dev yang lebih baik.
loganfsmyth
4
Anda akan mendapatkan banyak informasi yang salah karena perang Java / C ++ membakar dengan cerah, bersiaplah untuk meminta contoh spesifik sebelum menerima pendapat dan juga untuk meneliti lebih lanjut pada Anda sendiri =) Karena itu, saya setuju dengan @loganfsmyth bahwa Anda perlu tahu banyak bahasa karena hanya dengan itu Anda dapat memilih alat yang tepat untuk tugas apa pun. Dalam waktu dekat jika Anda hanya ingin belajar "pemrograman gaya permainan" maka gunakan apa yang Anda sukai (Java) dan kemudian pelajari C ++ nanti. Heck, nanti Anda mungkin akan melakukan pipeline konten dalam C # dan game di Java ME, sulit diprediksi =)
Patrick Hughes

Jawaban:

54

Ya itu, periksa daftar ini untuk bukti. Itulah beberapa game yang dibuat dengan Java menggunakan The Lightweight Java Game Library (LWJGL). Ini adalah kerangka kerja tingkat rendah, yang menyediakan OpenGL untuk grafis berkualitas tinggi dan OpenAL untuk suara. Ini juga menyediakan input API. Dengan ini, Anda dapat dengan mudah memulai pengembangan game serius di Jawa.

Saat ini saya sedang menulis game 3D kedua sebagai proyek hobi di Jawa, dan saya sangat menyukainya. Di masa lalu saya biasa menulis game saya dengan C ++, tetapi setelah beralih ke Java tidak ada jalan untuk kembali. Mendukung banyak sistem operasi dengan Java bisa sangat mudah, misalnya gim Java saya sebelumnya, yang saya kembangkan di Windows selama setahun, langsung bekerja di Linux dan di OS X hanya dengan satu bug tanpa perlu mengkompilasi apa pun pada platform tersebut.

Di sisi lain, dengan Java Anda memiliki beberapa masalah.

  1. Pemulung. Seperti yang telah dinyatakan orang lain, manajemen memori yang non-deterministik adalah masalah, dan Anda perlu kode itu dalam pikiran.
  2. Kurangnya perpustakaan pihak ke-3. Sebagian besar pustaka yang tersedia tidak mendukung Java. Di sisi lain Anda selalu memiliki opsi untuk memanggil pustaka asli ini dari Jawa juga, tetapi lebih sulit untuk melakukannya. Ada juga port Java atau pembungkus siap pakai yang tersedia untuk perpustakaan populer, misalnya saya menggunakan JBullet - port Java dari Bullet Physics Library . Di sisi lain, Java memiliki perpustakaan kelas besar yang built-in, yang mengurangi kebutuhan perpustakaan pihak ketiga yang tidak terkait dengan game. Kurangnya perpustakaan tidak menjadi masalah bagi saya, tapi saya bisa membayangkan itu bisa untuk orang lain.
  3. Java tidak didukung oleh konsol game yang populer dan tidak ada peralihan mudah ke yang dari Jawa sejauh yang saya tahu. Di sisi lain Android, yang merupakan platform seluler yang populer, menggunakan beberapa bentuk Java. Ini juga merupakan pilihan, tetapi jangan kecuali kode Java yang sama berfungsi pada PC dan perangkat Android.
  4. Komunitas yang lebih kecil. Kebanyakan programmer game menggunakan C ++ dan dalam pengalaman saya sering tidak menyukai Java. Jangan berharap mendapat banyak bantuan dari orang lain. Jangan berharap mendapatkan pekerjaan dalam pengembangan game tanpa keterampilan C ++.
msell
sumber
40

Tidak juga. Inilah hal-pertama, ada sangat sedikit dalam hal perpustakaan yang ada untuk Java dibandingkan dengan hampir semua yang ada untuk C ++.

Kedua, Java sebagai bahasa tidak cocok untuk pengembangan game - maksud saya, misalnya, jika Anda berurusan dengan buffer GPU maka Java tidak menyediakan fitur bahasa yang akan membantu Anda dalam memastikan mereka terkunci dengan benar dan dibuka atau dibuang, yang dilakukan C ++. Plus, ada masalah kinerja - dan GC tidak menentukan, yang sangat buruk untuk sebuah game.

Saya tidak pernah mengamati game non-indie yang menghabiskan waktu signifikan dalam bahasa yang tidak dikompilasi dengan kode asli sebelum eksekusi, dan bahkan game indie yang melakukannya jarang terjadi. Jadi keyakinan saya saat ini adalah bahwa hal itu tidak dapat dilakukan.

Juga, jika saya terus belajar dan meningkatkan Java sekarang, dan ternyata nantinya saya diminta untuk belajar C ++, apakah akan membuat peralihan menjadi sulit?

Ya, tentu saja. Java dan C ++ sangat berbeda, meskipun memiliki kesamaan sintaksis yang dangkal. Pengalaman Java tidak ada artinya saat belajar C ++.

Gameplay lebih dari grafis adalah pilihan yang layak, dan Anda dapat melihatnya dalam keberhasilan permainan seperti Terarria dan Minecraft. Tetapi jika Anda bermaksud membuat grafis srs, maka itu tidak akan bisa dilakukan di Jawa.

DeadMG
sumber
6
+1 karena ia menentukan grafik yang berat, bermain game cepat tanpa lag.
Joshua Drake
1
Kurangnya tipe data unsigned Java juga menentangnya. Ya, Anda bisa mengatasinya, tetapi itu tidak ideal dan Anda akan menggunakan kode yang tidak benar-benar mencerminkan data yang mendasarinya dengan benar.
Maximus Minimus
@deadmg Apakah case terkunci dan tidak terkunci , apakah Anda mengacu pada beberapa fungsi api DirectX? & Dapatkah Anda memberi tahu saya, apa buruknya memiliki GC non-deterministik.
Quazi Irfan
Non-deterministik GC dapat menyamakan dengan menjatuhkan frame, jika Anda menghentikan dunia berhenti dan mengunci segalanya lebih lama dari yang dibutuhkan untuk membuat frame. Dalam prakteknya ini tidak benar-benar sering terjadi / pernah jika Anda merencanakan penggunaan memori Anda, kolektor JVM dapat dikonfigurasi untuk jeda rendah (baik dalam batas aman untuk menjatuhkan bingkai). Tetap saja, ini bukan hal yang menyenangkan untuk dihadapi. Anda akhirnya harus mengembalikan sejumlah besar produktivitas yang Anda peroleh ketika meninggalkan C ++.
Michael
2
Sebuah permulaan Anda harus menulis ulang sepenuhnya.
DeadMG
25

Jadi, saya benar-benar serius tentang pengembangan game, apakah Java masih merupakan pilihan yang layak? Saya sudah mencoba beberapa kali untuk belajar C ++, tapi saya tidak terlalu suka bahasanya. Saya tidak benar-benar tahu mengapa, tetapi biasanya, setiap kali saya mencoba untuk belajar, saya tidak akan pernah bisa memahami topiknya.

Jika alasan Anda memilih Java adalah karena Anda tidak dapat memahami C ++, program Java Anda tidak akan cukup cepat untuk grafis berkualitas tinggi. Seharusnya menggunakan bahasa tingkat tinggi karena itu membuat Anda lebih produktif, bukan karena Anda tidak bisa mengerti bahasa tingkat bawah.

Saya tidak berpikir itu sepenuhnya ide yang buruk untuk menulis game di Jawa, terutama jika gim ini sederhana, tetapi Anda akan segera mengalami masalah kinerja di Jawa jika Anda menggunakannya sebagai penopang.

Jadi, singkatnya, dapatkah Java dianggap serius, untuk pengembangan game yang serius. Ini termasuk grafik yang berat, bermain game cepat tanpa lag, dan mungkin, dan mudah beralih ke konsol?

  1. Grafik Berat: Kemungkinan, tetapi Anda akan melakukan hal yang sama di Java / LWJGL seperti halnya Anda berada di C ++ / GL: menulis byte ke buffer GPU dan / atau menggunakan daftar tampilan yang sudah usang seperti yang dilakukan Minecraft. Jika Anda tidak memahami manajemen memori, Anda juga tidak akan melakukannya dengan benar.

  2. Bermain game cepat tanpa jeda: Bukan tugas yang mudah dalam bahasa apa pun, dan Anda lebih cenderung menembak diri sendiri tanpa memikirkannya.

  3. Tidak, Java tidak akan tersedia di konsol.

Jimmy
sumber
Sebagai pertanyaan sampingan, apa yang menggantikan daftar tampilan ketika sudah tidak digunakan lagi?
Sud
@Suds: Pipa yang dapat diprogram, saya percaya.
DeadMG
Ha! sudah menutupinya. VBO: gamedev.stackexchange.com/questions/22170/…
Jimmy
Platform seluler dapat dianggap sebagai konsol. Saya menyadari dia mungkin berbicara tentang tiga besar, tetapi Android menggunakan Java dan banyak game dibuat untuk itu.
Amplify91
1
@ Amplify91 ya beberapa game ditulis dalam java untuk android. Tetapi sebagian besar gim yang bagus dan mungkin semua gim yang intensif grafis atau multi platform ditulis dalam C ++ menggunakan Android NDK.
Coyote
15

Seorang programmer berpengalaman umumnya akan tahu banyak bahasa pemrograman - belajar bahasa pemrograman tambahan tidak terlalu sulit setelah Anda mengetahuinya dengan baik. Namun saya akan sangat menyarankan agar C ++ tidak menjadi bahasa pertama Anda, dan mungkin juga bukan yang kedua.

Itu karena C ++ mendapatkan banyak efisiensinya dari tidak melakukan pengecekan error runtime yang signifikan. Sebagai contoh mengakses elemen dari akhir array di Java akan selalu membuat pengecualian memberitahu programmer apa yang salah. Dalam C ++ Anda mungkin beruntung dan akan crash segera, tetapi sangat sering itu akan diam - diam membuang beberapa data lain dan kesalahan tidak akan muncul sampai nanti .

Saya sarankan Anda tetap menggunakan Java untuk saat ini (atau beralih ke C # jika Anda menginginkannya). Itu akan membuat Anda menyelesaikan sesuatu lebih cepat daripada menggunakan C ++, dan kinerja pada PC seharusnya tidak menjadi masalah.

Pikirkan tentang belajar C ++ setelah Anda menyelesaikan beberapa proyek dalam bahasa yang lebih aman. C ++ adalah yang Anda perlukan untuk sebagian besar pekerjaan pengembangan game profesional.

Perhatikan bahwa dengan pengecualian C # / XNA mendapatkan game yang Anda tulis ke konsol minimal mengharuskan Anda untuk mendirikan perusahaan, dengan kantor, dan memiliki anggaran besar yang tersedia untuk pengembangan perangkat keras dan biaya lainnya.

Adam
sumber
Ini juga sangat benar karena bahasa lain di luar C ++ akan memberi Anda rasa prestasi. C ++ dapat memakan waktu ratusan jam untuk apa yang terasa seperti tidak ada. Belajar bahasa lain terlebih dahulu membuat Anda basah.
Darkenor
Komentar Anda tentang kurangnya penanganan kesalahan benar-benar tentang C (dan disebut kode C ++ yang sebenarnya adalah C). C ++ memiliki pustaka standar (dan pustaka templat standar) yang memiliki penanganan kesalahan yang jauh lebih baik daripada yang Anda gambarkan. C ++ juga memiliki pustaka yang disediakan vendor (seperti MFC) yang menyediakan penanganan kesalahan yang layak.
Jasper
9

Penafian: Ini tidak persis menjawab pertanyaan Anda. Namun, saya telah berusaha (secara singkat) menyebutkan beberapa poin yang mungkin menarik bagi Anda.

Alasan Anda melihat begitu banyak tentang C ++ adalah karena C ++ masih merupakan standar industri - bahasa yang paling umum untuk konsol, dll.

Java tidak sering digunakan. Minecraft adalah gim yang cukup populer yang menjadikannya besar dengan Java; tapi itu tidak terlalu bagus secara grafis. Spiral Knights tidak buruk - juga dibuat di Jawa, dengan grafik yang signifikan.

Jika Anda menyukai Java, C # sangat mirip dalam sintaksis, dengan kelebihan yang dapat diinterupsi dengan C ++ - sehingga hal-hal tingkat rendah dapat dilakukan dalam C ++ jika perlu. Unity dapat menggunakan C # untuk scripting, dan XNA adalah pilihan yang sangat baik.

Sekali lagi, Java tidak banyak digunakan. Jika Anda menyukai gaya dan sintaksis, saya pikir Anda akan menemukan C # menjadi pengalaman pengkodean yang sangat mirip dan sangat menyenangkan.

Saya harap impian Anda berhasil, ini sangat menyenangkan di sepanjang jalan :)

ashes999
sumber
8
Banyak dan banyak ketidakakuratan dalam posting ini. Grafis "buruk" Minecraft tidak (banyak) terkait dengan bahasa. Performa buruk MC secara langsung terkait dengan Java menjadi bahasa yang buruk untuk permainan karena masalah kinerja BESAR, dan LWJGL menjadi perpustakaan yang tidak sesuai untuk proyek pengkodean besar karena alasan yang sama. Tetapi faktor terbesar adalah pengkodean dan implementasi Notch yang buruk, yang sedang diperbaiki ... secara perlahan. C # memberi Anda semua memori yang dikelola tanpa sebagian besar masalah kinerja Java. Kelemahannya adalah bahwa C # sangat berpusat pada Microsoft untuk game dan aplikasi.
MLProgrammer-CiM
2
@EfEs: Saya benci menyampaikannya kepada Anda, tetapi memori yang dikelola mengerikan untuk gim, dan orang yang membuat kode gim di XNA harus menghabiskan lebih banyak waktu mengelola memori daripada orang yang berkode C ++. Sifat non-deterministik dari GC berarti Anda harus menyatukan hampir semuanya dan menghindari alokasi seperti wabah-bukan cara bahasa seharusnya digunakan.
DeadMG
Jawaban ini tidak dimaksudkan untuk 100% akurat; Saya hanya mengutip contoh-contoh yang saya tahu secara samar-samar. Merasa bebas untuk DV.
ashes999
2
@DeadMG Saya tahu C ++ adalah cara untuk pergi, saya hanya mencoba menjelaskan bahwa C # lebih baik daripada Java untuk game.
MLProgrammer-CiM
5
Menjadi pengembang C # yang lama (bukan pengembang game) Saya percaya bahwa pengelolaan pooling dan memori adalah masalah besar untuk sistem yang dirancang dengan buruk. Orang-orang dengan pola pikir C / C ++ dan cara pengembangan yang saya tahu, hampir tidak terkesima dalam memori yang dikelola, desain dan pola arsitektur yang harus digunakan dan mengambil keuntungan dari mereka dalam bahasa seperti Java / C #. Apa yang ingin saya katakan, bukankah teknik atau produk C / C ++ buruk, tetapi bahkan jika Anda menggunakan bahasa yang lebih sederhana dalam hal sintaks (seperti Java dan C #), Anda masih perlu banyak pengalaman untuk merancang game Anda dengan benar. cara.
Ivaylo Slavov
3

Ini tidak menjawab pertanyaan Anda; masalah grafis dan konsol tampaknya menjadi sesuatu yang sangat perlu Anda pertimbangkan. Juga GC mempengaruhi kinerja. Tapi apa yang saya tulis tentang:

Jika Anda menulis program OO yang besar, kompleks, Anda akan menulisnya 5 kali lebih cepat di Java daripada C ++. Selain itu, perawatan akan jauh lebih mudah. Saya beralih, (diakui untuk perangkat lunak non-game), dan produktivitas saya meningkat. C #, alternatif lain yang baik, lebih sulit dipelajari daripada Java karena ada lebih banyak. Ketika Anda mengetahuinya, Anda dapat menulis kode lebih cepat daripada di Jawa; itu menawarkan banyak trik. Namun, saya menemukan trik itu dapat membuat pemeliharaan sulit. Dan kemudian ada Java doc, yang membantu dengan perpustakaan Sun dan kode lama Anda sendiri. C # tidak ada yang seperti itu.

Saya melakukan permainan berbulu besar di Jawa dan menemukan bahasa yang sempurna, tetapi grafik saya adalah dasar dan itu bukan penembak di mana sepersepuluh detik adalah keabadian bagi para pemain. Juga, saya berharap untuk menambahkan banyak ke nanti, sedangkan saya pikir kebanyakan orang hanya pergi dan menulis permainan baru.

RalphChapin
sumber
3

Lihat Bung, jawaban sederhana untuk "Apakah Java layak untuk pengembang game" adalah ya yang jelas. Anda dapat menggunakan bahasa pemrograman apa pun untuk membuat game. Itu tidak berarti Anda harus melakukannya .

Mungkin hal-hal yang paling mematikan Anda dari C ++ (manajemen memori tingkat rendah, tidak ada pengumpul sampah, harus memperhatikan pointer, struct sebagai array dll) adalah hal-hal yang harus Anda pelajari jika Anda ingin mengeksploitasi sumber daya komputer dengan paling efisien . Game Anda akan berjalan paling baik jika Anda mengeksploitasi sumber daya komputer dengan paling efisien.

Java melakukan beberapa hal (seperti memeriksa batas array) yang membuatnya berjalan lebih lambat. Dalam kode contoh derau Java Perlin yang dioptimalkan ini , penulis berkomentar "(akses array jauh lebih lambat daripada akses anggota)". Hal semacam ini cukup kontra intuitif yang berasal dari latar belakang C ++. Tetapi di Jawa, hal-hal seperti itu.

Saya katakan berhenti menghindari peluru, pelajari C ++, dan gunakan.

bobobobo
sumber
1

Anda harus melakukannya dalam bahasa yang paling Anda ketahui hingga Anda mampu mendapatkan pendidikan formal (Sarjana Sains?) Di bidang Ilmu Komputer, dengan menekankan desain game. Anda dapat menggunakan game Anda untuk mendapatkan beasiswa, terutama jika Anda dapat mengatakan "Saya melakukan ini tanpa pelatihan formal di Jawa"

JVM modern, bahkan yang dari Oracle, memiliki banyak, banyak fitur untuk mengatasi masalah yang dikemukakan orang di sini. Anda dapat menggunakan pengumpul sampah yang berbeda untuk mendapatkan perilaku pengumpul sampah yang lebih deterministik. Saya tidak memiliki pengalaman yang luas dengan perpustakaan 3D - hanya sedikit dengan Java3D - tetapi tidak ada yang tampaknya mengeluh tentang mereka. Analisis Escape sekarang memungkinkan kunci elision dan alokasi yang jauh lebih cepat / dapat diabaikan dari objek yang sangat berumur pendek.

Masalahnya adalah, apakah Anda memilih Java C ++, Anda harus belajar cara menggunakan concurrency dengan benar dan memiliki pemahaman yang baik tentang manajemen memori. Setelah semua, Anda dapat dengan mudah mengacaukan dengan mallocyang Anda bisa dengan new. Saya tidak tahu seperti apa alat untuk C ++, tetapi alat profil untuk Java cukup mudah digunakan, gratis, dan terintegrasi dengan IDE. Anda dapat menggunakannya untuk melacak masalah kinerja dan belajar .

Platypus mutan
sumber
5
Pendidikan formal di CS sangat berharga untuk keterampilan pemrograman aktual dalam disiplin apa pun. Saya akan tahu, saya berada di tahun ketiga saya.
DeadMG
4
Jelas tidak setuju dengan DeadMG. Setelah lulus dan memilih kursus yang saya suka, CS mengambil kekuatan pengembangan game saya dari 10% hingga 100%. Itu tidak mengajari saya UI, ikonografi, dll. Tetapi kode aktual dan nyata.
ashes999
2
@ ashes999: Maka kamu beruntung. Kursus saya tidak berharga dan saya tahu bahwa ada banyak orang lain yang merasakan hal yang sama.
DeadMG
2
@DeadMG sulit dilihat ketika Anda belajar. Setelah Anda bekerja beberapa tahun F / T, dan mempelajari keterampilan gratis lainnya, Anda akan melihat. Aku melakukannya. Tapi mungkin aku hanya menaruh banyak perhatian dan mencoba menerapkan semuanya pada hobi dev game-ku.
ashes999
1
Saya akan mengatakan bahwa itu tergantung pada sekolah dan profesor. Saya memiliki beberapa kelas pemrograman hebat di mana saya belajar banyak; dan saya punya beberapa di mana saya benar-benar merasa kehilangan pengetahuan karena menghadiri. Ini semua tentang memiliki profesor yang baik atau tidak. IMO.
Nate