Saya bukan pengembang game atau apa pun, tetapi saya tahu bahwa Java tidak terlalu banyak digunakan untuk pengembangan game. Java seharusnya cukup cepat untuk sebagian besar game, jadi di mana tangkapannya? Saya dapat memikirkan beberapa alasan:
- Kurangnya pengembang game dengan keahlian di Jawa
- Kurangnya kerangka pengembangan game yang bagus
- Programmer tidak ingin menerima Java sebagai bahasa pemrograman game. Sebagian besar hanya menerima C ++ seperti itu?
- Tidak ada dukungan untuk konsol game (meskipun pasar PC masih ada)
Tentu saja itu bisa menjadi sesuatu yang lain. Bisakah seseorang yang mengenal bisnis lebih baik dari saya menjelaskan mengapa Java tidak mendapatkan momentum dalam hal pengembangan game?
java
game-development
Anto
sumber
sumber
Jawaban:
Beberapa alasan:
Java terutama digunakan dalam permainan Android saat ini, hanya karena itu bahasa utama untuk platform itu.
sumber
malloc
ataunew
, jadi jika itu masalah Anda akan menerapkan pengumpulan apa pun. Tidak terkait dengan titik itu, masalah besar dengan Java adalah bahwa ia tidak mendukung tipe nilai, tidak seperti C #.Alasan teknis:
Alasan non-teknis:
Menariknya ada juga beberapa alasan bagus mengapa pengembang game harus mempertimbangkan Java:
sumber
Oke, ada banyak informasi yang salah di utas ini.
Saya tahu bisnis game dengan sangat baik, telah berada di dalamnya selama 25 tahun. Saya juga mengenal Java dalam game dengan sangat baik sebagai penginjil teknis Sun Game Java dan mengajar pakar pemrograman kinerja Java.
Dalam hal kecepatan komputasi, Java mengalahkan C ++ di banyak tolok ukur komputasi ilmiah saat ini. Anda dapat menulis kode patologis dalam kedua bahasa yang berkinerja buruk jika Anda mau, tetapi secara keseluruhan, mereka setara dan telah lama.
Dalam hal penggunaan memori, Java memang memiliki beberapa over-head. HelloWorld adalah program 4K di java. Tetapi overhead itu sangat tidak berarti dalam sistem multi-GB saat ini. Akhirnya, Java memang memiliki lebih banyak waktu startup. Saya tidak akan merekomendasikan menggunakan Java untuk utilitas run-time pendek seperti perintah baris perintah Unix. Jika demikian, startup akan mendominasi kinerja Anda. Namun dalam sebuah game, itu cukup tidak penting.
Kode game Java yang ditulis dengan benar tidak mengalami GC jeda. Sama seperti kode C / C ++, itu memang memerlukan beberapa manajemen memori aktif tetapi tidak ke tingkat C / C ++. Selama Anda menjaga penggunaan memori Anda untuk objek yang berumur panjang (bertahan untuk seluruh level atau permainan) dan objek yang berumur pendek (vektor dan semacamnya, diedarkan dan dihancurkan dengan cepat setelah perhitungan) gc seharusnya tidak menjadi masalah yang terlihat.
Dalam hal akses memori langsung, Java sudah lama memilikinya; sejak Java 1.4 dalam bentuk Native Direct Byte Buffer. Memutar-mutar bit di Jawa bisa sedikit menjengkelkan karena kurangnya tipe integer yang tidak ditandatangani tetapi putaran pekerjaannya sudah terkenal dan tidak terlalu berat.
Walaupun Java sebenarnya tidak pernah memiliki Direct3D mengikat, itu karena teknologi Java berusaha untuk portabilitas. Ini memiliki DUA pengikatan OpenGL (JOGL dan LWJGL) dan pengikatan OpenAL (JOAL) dan pengikatan input portabel (JInput) yang mengikat di bawah tenda ke DirectInput pada Windows, HID Manager pada OSX, dan pengikatan Linux (saya lupa yang mana).
Memang benar bahwa tidak ada mesin permainan lengkap yang menampilkan Java dengan cara, katakanlah Unity, telah menampilkan C # dan itu adalah kelemahan dalam ruang independen. Di sisi lain, ada dua APIS tingkat Scenegraph yang baik yang sepenuhnya platform portabel di Windows, OSX dan Linux. Keduanya ditulis oleh Josh Slack, yang pertama disebut mesin JMonkey dan Ardor3D kedua.
Poster atas benar bahwa dua hal terbesar yang menahan Java dalam pengembangan game adalah prasangka dan portabilitas. Yang terakhir adalah masalah terbesar. Meskipun Anda bisa menulis game Java dan mengirimkannya ke Windows, OSX dan Linux, tidak pernah ada VM konsol. Ini karena ketidakmampuan total dalam manajemen menengah Sun. Beberapa dari kita yang bekerja pada Java dalam game sebenarnya memiliki kesepakatan dengan Sony tidak kurang dari 3 kali untuk mendapatkan VM di Playstation dan semua 3 kali manajemen menengah Sun membunuhnya.
Sementara Sun bermain-main dengan teknologi klien, faktanya adalah bahwa manajemen Sun tidak pernah mendapatkan produk konsumen. Itulah mengapa Java sebagai bahasa klien dari Sun tidak pernah berhasil dalam bentuk apa pun, dan mengapa butuh Google dan Dalvik (VM mirip Java Android) untuk menjadikan Java platform sukses di mana saja.
Dan itulah sebabnya saya kode game di C # hari ini. Karena Mono pergi ke mana manajemen Sun menolaknya.
sumber
Java sangat bagus untuk logika bisnis, server, dan kode independen platform yang harus dijalankan dengan andal. Ada beberapa faktor mengapa Java tidak sering digunakan dalam gim:
Tidak mudah untuk bekerja dengan pustaka C ++ dari bahasa bytecode seperti Java (menulis layer JNI) dan .net (banyak atribut marshalling / unmarshalling, api / struktur). Jadi itu menambah sedikit kerja untuk sedikit manfaat.
Catatan tambahan: beberapa server game menggunakan Java.
Posting serupa di sini : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java
sumber
Java tidak cukup cepat untuk sebagian besar pengembangan game. Jauh lebih lambat daripada menggunakan C ++ / Majelis, yang merupakan standar. Itu alasan yang sama lebih banyak pengembangan game tidak dilakukan menggunakan C # atau VB. Pengembang game perlu dan rencanakan setiap siklus jam terakhir yang dapat mereka peroleh untuk hal-hal seperti perhitungan fisika, logika AI, dan interaksi lingkungan.
Untuk gim yang lebih sederhana, Java dapat digunakan dengan cukup efektif. Jika Anda ingin membuat klon Tetris atau Bejeweled, atau hal lain dengan tingkat detail seperti itu, maka Java akan berfungsi dengan baik. Tetapi Java tidak mungkin membuat game seperti Halo, Medal of Honor, Command & Conquer, dan sebagainya dan membuatnya bisa dimainkan. Setidaknya seperti yang ada saat ini.
Dan alasan Anda mendaftar dalam pertanyaan Anda juga valid. Kecuali, saya pikir, karena kurangnya pengembang game dengan keahlian Java. Banyak game di ponsel dan perangkat portabel lainnya ditulis dalam Java (termasuk sebagian besar game Android), dan beberapa gimnya cukup bagus. Jadi saya pikir ada basis yang layak, dan terus berkembang, para pengembang game dengan pengetahuan Java.
Pikiran berubah pada kemampuan untuk menggunakan bahasa tingkat yang lebih tinggi ini untuk beberapa game yang lebih maju. Sebagai contoh, salah satu game favorit saya, Auran's Train Simulator, ditulis dengan porsi besar dalam C #, dan itu bekerja dengan cukup baik. Jadi basisnya berkembang dan akan terus berkembang.
sumber
Game modern adalah semua tentang grafik 3D yang terjadi pada perangkat keras tujuan khusus.
Bahkan pada tahun 2002, Jacob Marner menemukan dalam laporannya "Mengevaluasi Java untuk Pengembangan Game" bahwa Java cukup dapat digunakan untuk game, kecuali untuk bagian yang paling tergantung pada kinerja, dan karena kekokohan bahasa dan JVM yang mendasarinya, itu lebih murah melakukannya dengan cara ini.
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf
Ini adalah pendapat pribadi saya bahwa dengan kemajuan yang telah terjadi sejak itu, terutama dalam grafis 3D, dan dengan binding yang sangat baik untuk OpenGL et al, bahwa kerugian ini jauh lebih sedikit diucapkan akhir-akhir ini.
Karenanya masalahnya harus di tempat lain. Alasan yang mungkin adalah ukuran runtime Java (yang jauh lebih sedikit masalah saat ini dengan permainan multi-DVD), dan satu lagi kelambanan dari kode yang ada. Ini terkenal rapuh untuk mulai bekerja dengan kode asli di Jawa. Alasan ketiga adalah apa yang biasa dilakukan oleh pengembang bintang dalam permainan. Yang keempat adalah apakah Java sama sekali tersedia di platform.
Satu hal yang pasti - sebagian besar gim berubah menjadi skrip alih-alih semuanya dibakar dalam kode C sejak awal, dan Anda menginginkan runtime terbaik di bawah bahasa skrip Anda. Hari-hari ini pada dasarnya ini berarti CLR atau JVM.
sumber
Pengembang game suka menjadi dekat dengan logam dan sering akan menulis loop batin ketat mereka dalam perakitan. Java tidak menawarkan tingkat kinerja yang mungkin sama, baik dalam hal kecepatan yang konsisten atau penggunaan memori (menjalankan JIT akan sangat merugikan).
sumber
Saya pikir faktor pembatas bagi kebanyakan orang adalah (kurangnya) ketersediaan mesin game yang bagus. Untuk melangkah lebih jauh, kita perlu melihat mengapa itu tidak tersedia.
Saya akan melihat itu dari arah lain sejenak. Mengembangkan mesin permainan (misalnya) adalah banyak pekerjaan. Siapa yang akan mendapat manfaat cukup dari pengembangan satu untuk menginvestasikan waktu dan upaya untuk melakukannya?
Sebagian besar kandidat yang jelas untuk pengembangan seperti kerangka kerja di / untuk Java (misalnya, IBM, Oracle) tampaknya tidak tertarik pada permainan. Calon yang jelas untuk pengembangan game (misalnya, Id, EA) tampaknya memiliki minat yang hampir sama kecil di Jawa.
Hampir satu - satunya kandidat yang dapat saya pikirkan yang tampaknya masuk akal adalah Google. Bahasa pengembangan utama untuk Android adalah Java, dan mendorong pengembangan game untuk Android dapat memberikan keuntungan nyata bagi platform.
Sejauh yang saya tahu, mereka belum melakukannya (belum?) Namun, yang meninggalkan beberapa batasan yang cukup berat bagi hampir semua orang. Tanpa sedikit cara modern, mesin game berkinerja tinggi untuk menggunakan pengembangan di Jawa berarti cukup banyak pekerjaan ekstra, dengan (apa yang tampak bagi saya seperti) prospek kecil untuk menghasilkan banyak manfaat sebagai imbalan untuk kerja ekstra.
sumber
Pertanyaannya adalah setara dengan menanyakan sesuatu di baris:
Apa yang lebih baik untuk menyalakan mobil Anda, mesin perahu atau mesin jet.
Itu datang ke skalabilitas, penghindaran bug, kecepatan, tanda tangan memori, modularitas dan sejumlah hal. Pertanyaannya seharusnya bukan tentang apa yang lebih baik sebagai standar industri, pertanyaannya haruslah "apa yang lebih baik bagi saya" seperti dalam apa yang Anda ketahui atau seberapa baik Anda mengetahuinya. Jika berhasil, maka berhasil, jika Anda benar-benar dapat menjual ide, maka itu berhasil dan siapa tahu Anda bahkan mungkin menekuk beberapa sendok.
sumber
Java tidak dibuat dengan pengembangan game, Java dibuat menjadi bahasa "untuk web".
Adapun pengembangan game, Sun tidak benar-benar mendukung Java sebagai bahasa pengembangan game karena Microsoft mendukung C #.
Saya pikir kurangnya kerangka pengembangan game yang memikat adalah yang benar-benar membunuh Java dalam aspek ini.
sumber
Lebih mudah untuk merekatkan C lebih langsung ke perangkat keras dan driver baru yang tidak konvensional. Semakin cepat dan semakin dekat seorang programmer game bisa mendapatkan ke perangkat keras, semakin baik mereka bisa mengalahkan permainan yang bersaing. Pemrogram game kemudian hanya bertahan dengan metodologi dan alat yang sama dengan game yang telah terbukti sebelumnya.
Untuk game yang mengoptimalkan perangkat keras terbaru tidak terlalu penting, seperti game ponsel biasa, menggunakan C dengan cara ini tidak sepenting portabilitas Java yang lebih besar.
sumber
Bagi sebagian orang alasan tidak ada hubungannya dengan kecepatan, perpustakaan, atau ketersediaan. Itu hanya karena bahasa itu sendiri. Beberapa orang tidak menyukai bahasa Jawa. Orang lain lebih suka menggunakan bahasa pemrograman favorit mereka daripada menggunakan Java untuk membuat game.
sumber
Ini adalah bahasa interpretasi, yaitu lambat. Anda berurusan dengan kartu grafis dan kartu grafis yang merupakan perangkat keras. Apa bahasa yang baik untuk berurusan dengan perangkat keras? Yah C ++, ini cukup rendah, dan Anda berurusan dengan pointer dan apa pun.
Jika Anda ingin memompa grafis gila seperti crysis dan apa pun yang Anda tidak akan lakukan Java untuk itu.
Tidak hanya itu, Oracle memiliki Java, pemikiran bahwa sebuah perusahaan dapat menuntut Anda tidak berani. Terutama ketika Anda ingin membangun juru bahasa Anda sendiri untuk JAVA untuk menargetkan game tanpa mendapatkan tuntutan karena FUD fragmentasi.
sumber