Apakah Java pilihan yang baik untuk game lintas platform? [Tutup]

13

Saya ingin membuat game di Java dan ingin itu berfungsi di Windows, Linux, dan Mac. Saya cukup yakin C # adalah pilihan yang buruk untuk ini, dan saya tidak punya cukup pengalaman dalam C atau C ++. Saya ingin menjauh dari Flash. Karena itu, apakah Jawa pilihan yang baik untuk saya? Sebagian besar, saya menggunakan C #, dan berpikir bahwa Java mirip, jadi saya menganggap itu tidak akan sulit untuk dipelajari. Tetapi apakah ini cukup cepat? Apakah ada bahasa yang lebih cocok untuk kebutuhan saya daripada Jawa?

Komunis
sumber
8
Tergantung pada gaya permainan yang ingin Anda lakukan. Tergantung pada gaya yang diinginkan, bisa jadi HTML5 dan beberapa javascript akan bekerja untuk Anda, jika tidak java.
Patrick Hughes
Oddlab menjual game berbasis Java, misalnya Tribal Trouble. Anda dapat melihat detail mesin mereka di oddlabs.com/technology.php
5
Minecraft adalah contoh yang bagus untuk gim lintas platform yang ditulis dalam Java. Ketika pemuda kami memiliki teman-temannya untuk sesi Minecraft yang serius, mereka memainkannya di OSX, Windows dan Linux.
Kev
Dua tahun kemudian, C # sekarang cukup baik untuk hal-hal seperti itu dengan bantuan mesin Unity dan / atau Monogame, keduanya juga mendukung iOS, Android, dan WP8.
Magus

Jawaban:

28

Java sangat cocok untuk menulis game lintas platform. Keuntungan utama:

  • Portabilitas - Secara umum, Anda dapat menulis gim Java dan berharap gamenya berjalan tidak berubah di sebagian besar platform. Ini mungkin opsi yang paling portabel dari bahasa apa pun - C / C ++ adalah pilihan lain yang sangat portabel tetapi perlu dikompilasi ulang untuk setiap platform dan dalam banyak kasus perpustakaan memiliki fitur spesifik platform yang membatasi portabilitas.
  • Kinerja - kode Java, jika ditulis dengan baik, akan berkinerja cukup baik serta bahasa lainnya, termasuk C / C ++. Kompiler JVM JIT sangat bagus. Anda dapat menulis gim yang sukses dan berkualitas tinggi di Java (Minecraft, misalnya).
  • Pustaka - ada banyak pustaka yang tersedia untuk Java yang mencakup hampir setiap fitur yang Anda inginkan dalam gim, mulai dari jaringan hingga grafik hingga suara hingga AI. Sebagian besar perpustakaan Java adalah open source.

Keputusan utama yang harus Anda ambil adalah kerangka kerja GUI apa yang akan Anda gunakan. Ada beberapa opsi yang berbeda tetapi yang paling menonjol adalah:

  • jMonkeyEngine - mesin 3D sepenuhnya matang. Jika Anda ingin membuat game 3D, ini mungkin pilihan terbaik Anda - berisi banyak fitur mesin game seperti grafik adegan, pembuatan medan, dll.
  • LWJGL - perpustakaan yang lebih rendah dengan akses langsung ke OpenGL. Mungkin menarik bagi Anda jika Anda ingin kinerja maksimal dan tidak keberatan menulis banyak mesin Anda dari awal.
  • Swing - memiliki keunggulan menjadi sangat portabel dan termasuk dalam runtime Java sehingga tidak perlu ketergantungan tambahan. Ini bagus untuk game 2D non-intensif-grafis (game strategi, permainan kartu dll.)
  • Slick - pustaka game 2D berdasarkan LWJGL. Mungkin bagus jika Anda ingin menulis game 2D tetapi masih membutuhkan kinerja grafis yang baik (shoot-em-up, game platform bergulir dll.)
  • JavaFX - dirancang untuk aplikasi internet yang kaya, kira-kira seperti Flash. Memiliki banyak fitur yang bagus untuk permainan meskipun saya belum pernah melihatnya. JavaFX 2.0 khususnya terlihat cukup menjanjikan.

Kerugian utama Java untuk bermain game sebenarnya ada di sekitar "kasus tepi" yang mungkin tidak akan memengaruhi Anda tetapi relevan untuk beberapa kelas permainan:

  • Ketersediaan mesin 3D - meskipun alat dan mesin yang tercantum di atas baik, mereka masih belum cukup untuk tingkat mesin C / C ++ seperti Mesin Unreal yang digunakan oleh perusahaan game profesional. Jadi Java mungkin tidak akan menjadi pilihan pertama Anda jika Anda mencoba mengembangkan FPS utama dengan anggaran multi-juta - C / C ++ masih menang di sini.
  • GC latensi Pengumpulan sampah Java secara keseluruhan merupakan manfaat besar, tetapi dapat menyebabkan sedikit jeda ketika siklus GC terjadi. Ini menjadi jauh lebih baik dengan JVM latensi rendah baru, tetapi masih bisa menjadi masalah untuk game dengan persyaratan latensi sangat rendah (penembak orang pertama mungkin). Solusinya adalah dengan menggunakan perpustakaan latensi rendah seperti http://javolution.org/ , namun ini tampaknya lebih banyak ditargetkan pada perdagangan frekuensi tinggi atau sistem waktu nyata daripada permainan.
  • Kurangnya kemampuan untuk mengeksploitasi optimisasi tingkat rendah - sementara kompiler Java JIT sangat bagus, ia masih memberlakukan beberapa kendala yang tidak dapat Anda hindari (misalnya memeriksa array, misalnya). Jika Anda benar-benar perlu mendapatkan akses tingkat kode mesin asli untuk mengoptimalkan hal semacam ini, maka sekali lagi Anda mungkin akan lebih memilih C / C ++ daripada Java.

Perhatikan bahwa ada juga beberapa opsi penempatan yang perlu dipertimbangkan:

  • Applet - berjalan di browser, sangat nyaman bagi pengguna, namun applet agak terbatas dalam hal apa yang dapat mereka lakukan untuk alasan keamanan. Perhatikan bahwa Anda dapat menandatangani applet untuk mendapatkan hak istimewa keamanan tambahan, meskipun ini akan menyebabkan permintaan yang sedikit menakutkan bagi sebagian besar pengguna.
  • Java Web Start - lebih baik untuk game yang lebih canggih yang memerlukan unduhan lokal lengkap dan juga perlu mengakses sumber daya sistem lokal. Ini juga bekerja dengan cara platform-independen yang cantik. Mungkin rute terbaik untuk game berukuran sedang atau sesuatu yang perlu lolos dari batasan keamanan applet.
  • Unduh penginstal - Anda dapat menulis penginstal untuk game Java seperti yang Anda bisa untuk bahasa lain. Agak lebih sulit untuk dikonfigurasikan dan diuji, karena penginstal cenderung memiliki beberapa fitur khusus platform.
  • Web - Anda bisa menulis aplikasi web HTML5 dan memanfaatkan kekuatan Java murni di sisi server. Layak dipertimbangkan untuk gim web multipemain.

Akhirnya, ada baiknya mempertimbangkan beberapa bahasa JVM lainnya - ini memiliki semua manfaat dari platform Java yang tercantum di atas, tetapi beberapa menganggapnya sebagai bahasa yang lebih baik daripada Java itu sendiri. Scala, Clojure dan Groovy akan menjadi yang paling menonjol, dan mereka semua dapat menggunakan alat dan perpustakaan Java yang tercantum di atas.

mikera
sumber
1
JWS tidak benar-benar menambahkan lebih dari applet selain memisahkan aplikasi Anda dari browser. Dalam kedua kasus saya pikir Anda akan ingin menandatangani kode Anda jika Anda menggunakan pustaka OpenGL.
Peter Taylor
2
Saya akan mengatakan bahwa akses sistem lokal adalah "banyak" yang sangat besar atas pembatasan applet untuk banyak game serius, terutama multipemain. HTML5 rapi, tapi ini masih sedikit dengan dukungan jerawatan dan bit penting seperti GL dan Soket dimatikan pada banyak browser, ditambah audio belum cocok untuk penggunaan game.
Patrick Hughes
1
@PatrickHughes, jika Anda ingin akses sistem lokal dari JWS tanpa dialog menakutkan yang besar Anda harus menandatangani kode Anda - dan applet yang ditandatangani biasanya akan memiliki akses sistem lokal juga.
Peter Taylor
Anda juga dapat menggunakan Inno Setup untuk mendistribusikan game Java Anda.
Mahmoud Hossam
1
Anda dapat menambahkan LIBGDX ke daftar paket yang membantu Anda menulis mesin Anda sendiri; ia memiliki pengaturan dan optimasi JNI untuk berbagai platform dan bahkan Android dan turun ke OpenGL ES.
Patrick Hughes
4

Minecraft dan Blocks that Matter sama-sama dibangun di Jawa, jadi ya itu bagus untuk membuat game. Masalah utama yang akan Anda hadapi saat menggunakan Java adalah porting ke platform seluler jika Anda memilih untuk pergi rute itu dan menulis aplikasi asli. Android adalah semacam Java SE frankensteined dengan perpustakaan terpisah. Blackberry RIM menggunakan Java ME. Secara teori iOS dapat diprogram dengan Java meskipun Objective-C kemungkinan akan menjadi pilihan yang lebih baik untuk platform itu.

Java sangat mirip dengan C #. Saya sering menemukan kode C # dapat dimengerti meskipun hanya mengetahui Java. Mereka memang memiliki filosofi desain yang berbeda tetapi sejauh dapat digunakan secara luas dengan kerumitan minimal keduanya sesuai dengan tagihan. C # bukan pilihan yang mengerikan untuk gim dengan cara apa pun, meskipun penyebaran seluler Anda akan lebih sulit dan menggunakan platform non-windows akan lebih memakan waktu atau sulit tergantung pada pustaka eksternal spesifik apa dan seterusnya yang akhirnya Anda gunakan.

Insinyur Dunia
sumber
1
Java on mobile: kompilasi sekali, debug di mana-mana: '(.
deadalnix
0

Cara yang paling jelas dan paling tidak tahan adalah dengan menggunakan HTML5 + javascript combo. Aplikasi atau game apa pun yang dibuat menggunakan ini akan berjalan di hampir setiap perangkat dan browser.

Keuntungan : - Anda membutuhkan konfigurasi nol untuk membuat game Anda berjalan di berbagai platform dan perangkat.

CATATAN: - Saya telah melihat beberapa game yang dibangun menggunakan teknologi yang disebutkan di atas, tetapi mereka bertubuh lebih kecil. Tapi, saya kira jika seseorang bisa membuat mentega dari susu maka keju bukan tidak mungkin

Pankaj Upadhyay
sumber
0

Anda dapat menggunakan Scala dan Skema Bigloo di Eclipse untuk menggunakan JVM untuk kode yang ditekankan atau tindakan paralel di dalam game Java Anda.

Dengan Pola Desain dan UML2, Anda juga dapat mengamankan kode dengan OCL, semua ada di Topcased.org.

Menguasai alat-alat itu butuh waktu, tetapi itu adalah latar belakang Java, pangkalan yang akan mendorong Anda ke atas.

cl-r
sumber
-10

Jawaban singkat: tidak.

Java tidak menghasilkan biner yang dapat dieksekusi tetapi hanya bytecode seperti halnya C # (CLI), dan ini bukan hal yang baik untuk bisnis yang serius di "lingkungan terbuka" karena dua alasan utama:

  • probabilitas untuk terjebak dalam reverse engeneering sangat tinggi, terutama dengan bahasa-bahasa lama dan sangat dikenal seperti Jawa
  • Anda tidak memiliki kendali penuh atas kinerja mesin, dalam kasus Java, JVM memainkan peran besar dengan mengambil kendali penuh.

Tentu saja setiap bahasa memiliki perpustakaan sendiri tetapi karena jumlah yang besar untuk masing-masing dan setiap bahasa ini bukan masalah nyata dan saya tidak berpikir adalah tujuan dari topik ini.

Mungkin pada level profesional Anda dapat menemukan sesuatu yang dapat melanggar aturan seperti dev-Kit yang dapat menerjemahkan semua pernyataan C # menjadi kode perakitan untuk mesin dunia nyata, tetapi jika pendekatan semacam ini tidak ada dalam kartu, Anda secara praksis terpaksa harus pertimbangkan hanya C dan C ++ untuk pengembangan Anda ketika Anda bertujuan untuk menjual produk Anda di lingkungan terbuka.

Hal-hal yang sedikit berbeda untuk perangkat seluler karena mereka adalah "lingkungan tertutup" bahkan Android ditutup secara pratik mengingat fakta bahwa sumber ROM dunia nyata biasanya tidak tersedia untuk umum, Android dapat dianggap sebagai open source tetapi 99 % dari ROM di perangkat aktual tidak. Dalam hal ini Anda tidak bisa berdebat terlalu banyak, semuanya sudah diatur untuk Anda dan setiap platform memiliki bahasa sendiri seperti semua orang tahu.

Pada akhirnya jika Anda akan menjual produk ini di lingkungan yang terbuka saya hanya bisa menyarankan bahasa yang dapat menghasilkan kode kompilasi dan biner / perakitan, di lingkungan tertutup keputusan ini lebih mudah dilakukan karena alasan yang berbeda.

Mikro
sumber
7
Anda tampaknya percaya bahwa binari yang dikompilasi lebih sulit untuk direkayasa balik daripada biner bytecode. Mungkin ada sedikit kebenaran dalam hal itu, tetapi tidak banyak. Bahkan mungkin lebih banyak orang dapat bekerja dengan x86 dan x64 disassembler daripada dengan CLI atau bytecode Java, dan Anda akan kagum betapa membantu alat seperti IDA Pro dapat (disclaimer - Saya belum pernah menggunakannya karena versi gratis cukup banyak tahun lalu - mungkin bahkan lebih mudah sekarang). File bytecode yang membingungkan bahkan mungkin lebih sulit untuk direkayasa ulang dan, dalam hal apa pun, kebanyakan orang akan memiliki sedikit alasan untuk peduli.
Steve314
2
Mengapa sedikit alasan untuk peduli? Nah, berapa banyak orang yang menulis sendiri mesin permainan level rendah milik mereka? Dan bahkan jika Anda melakukan itu, apa kemungkinan seseorang lebih suka mencuri milik Anda (membutuhkan rekayasa balik, kekurangan segala jenis dokumentasi, dll - banyak waktu terbuang di sana, tidak peduli apa bahasa pengembangannya) daripada secara hukum menggunakan mesin open-source gratis yang terdokumentasi dengan baik? Pembajakan program penuh adalah masalah nyata yang jauh lebih mungkin daripada rekayasa balik untuk mencuri gagasan kode, dan bajak laut tampaknya tidak sedikit pun terhalang oleh kode kompilasi asli.
Steve314
1
Pada level abstraksi, instruksi JVM adalah level yang sangat rendah - tidak persis seperti pada perangkat keras, tetapi pada dasarnya sama seperti jauh dari abstraksi lapisan aplikasi. Di mana lapisan jumlah abstraksi ada di pustaka Java standar, artinya sebenarnya ada beberapa lapisan antara platform dan aplikasi akhir. Kecuali itu biasanya terjadi di C dan C ++ (mengapa menciptakan kembali libpng dll) - kebanyakan orang akan menggunakan perpustakaan umum yang secara efektif membentuk satu set platform yang dikenal luas, dan alat rekayasa balik yang baik dapat mengenalinya.
Steve314
3
Untuk memenuhi persyaratan semua kode harus dikirimkan pada FPGA dan dibungkus dalam epoksi. Kejutan, bahkan paket chip kotak hitam dapat dan direkayasa balik sepanjang waktu. Kemudian bahkan raksasa perkasa seperti Intel memperkenalkan bug dalam paket CPU mereka sehingga epoksi Anda tertanam, kotak hitam perangkat keras masih akan menderita paparan pustaka perangkat keras. Akhirnya panggilan ke keamanan oleh ketidakjelasan, itu tidak berhasil. Reductio ad absurdum, saya tahu, tapi begitu juga jawaban aslinya.
Patrick Hughes
3
Sayangnya saya tidak memiliki reputasi yang cukup untuk menurunkan Anda. Semua argumen Anda gagal. Ada orang-orang di luar sana yang mendekode, mendekompilasi dan meretas game yang diproduksi dalam bahasa C, C ++ atau apa pun, jadi menjadi paket biner tidak akan memberikan banyak keamanan tambahan. Lebih lanjut, jika jika OP khawatir tentang ini, ada banyak obfusator java yang sangat bagus di luar sana. Tentang kontrol penuh kinerja mesin, sebagian besar programmer C dan C ++ juga tidak memilikinya, cukup tulis kode yang baik dan kompiler akan mengoptimalkan apa yang dibutuhkan. Dan bahkan jika itu merupakan masalah, Anda bisa menggunakan JNI atau JNA.
Victor Stafusa