Javaはクロスプラットフォームゲームに適していますか?[閉まっている]


13

Javaでゲームを作成したいのですが、Windows、Linux、Macで動作するようにしたいと思います。これにはC#が悪い選択であり、CまたはC ++の十分な経験がないと確信しています。Flashから離れたい。したがって、Javaは私にとって良い選択ですか?ほとんどの場合、私はC#を使用しており、Javaも似ていると思うので、学習するのはそれほど難しくないと思います。しかし、それは十分速いですか?Javaよりも私のニーズに適した言語はありますか?


8
探しているゲームのスタイルに依存します。希望するスタイルによっては、HTML5と一部のjavascriptが、javaではない場合は動作する可能性があります。
パトリックヒューズ

Oddlabは、Tribal TroubleなどのJavaベースのゲームを販売しています。彼らのエンジンの詳細は、oddlabs.com

5
Minecraftは、Javaで作成されたクロスプラットフォームゲームの好例です。私たちの若者が深刻なMinecraftセッションのために仲間を見つけたら、彼らはOSX、Windows、Linuxでそれをプレイしています。
ケフ

2年後、C#はUnityエンジンやMonogameの助けを借りてそのようなものに非常に優れたものになりました。どちらもiOS、Android、WP8もサポートしています。
メイガス

回答:


28

Javaは、クロスプラットフォームゲームの作成に非常に適しています。主な利点:

  • 移植性 -一般に、Javaゲームを作成して、ほとんどのプラットフォームで変更せずに実行できることを期待できます。おそらくどの言語でも最も移植性の高いオプションです。C/ C ++は他の移植性の高いオプションですが、プラットフォームごとに再コンパイルする必要があり、多くの場合、ライブラリには移植性を制限するプラットフォーム固有の機能があります。
  • パフォーマンス -Javaコードは、適切に記述されていれば、C / C ++を含む他の言語とほぼ同様に実行されます。JVM JITコンパイラーは非常に優れています。Java(Minecraftなど)で最高品質の成功したゲームを作成できます。
  • ライブラリ -ネットワーキングからグラフィックス、サウンド、AIに至るまで、ゲームで必要なほぼすべての機能をカバーするJava用の膨大なライブラリがあります。ほとんどのJavaライブラリはオープンソースです。

あなたが取らなければならない主な決定は、使用するGUIフレームワークです。いくつかの異なるオプションがありますが、最も顕著なオプションは次のとおりです。

  • jMonkeyEngine-本格的な3Dエンジン。3Dゲームを作成する場合は、おそらくこれが最良の選択です。シーングラフ、地形生成など、多くのゲームエンジン機能が含まれています。
  • LWJGL -OpenGLに直接アクセスできる、より低レベルのライブラリ。最大のパフォーマンスが必要で、多くのエンジンをゼロから作成することを気にしない場合は、アピールする可能性が高い
  • Swing-非常に移植性が高いという利点があり、Javaランタイムに含まれているため、特別な依存関係を必要としません。グラフィックを多用しない2Dゲーム(戦略ゲーム、カードゲームなど)に適しています
  • スリック -LWJGLに基づく2Dゲームライブラリ。2Dゲームを作成したいが、それでも優れたグラフィックスパフォーマンスが必要な場合(シューティングゲーム、スクロールプラットフォームゲームなど)
  • JavaFX-ほぼFlashのようなリッチインターネットアプリケーション用に設計されています。私はまだあまり使われていませんが、ゲームに適した素晴らしい機能がたくさんあります。特にJavaFX 2.0は非常に有望です。

ゲーム用のJavaの主な短所は、おそらくあなたには影響を及ぼさないが、ゲームのいくつかのクラスに関連する「エッジケース」に関するものです。

  • 3Dエンジンの可用性 -上記のツールとエンジンは優れていますが、プロのゲーム会社が使用しているアンリアルエンジンのようなC / C ++エンジンのレベルにはまだ達していません。そのため、数百万の予算で主要なFPSを開発しようとしている場合、Javaが最初の選択肢ではない可能性があります。C/ C ++がここでも勝ちます。
  • GCレイテンシ Javaガベージコレクションは全体的に大きな利点ですが、GCサイクルが発生するとわずかな一時停止を引き起こす可能性があります。これは、新しい低遅延JVMを使用することで大幅に改善されますが、非常に低遅延の要件を持つゲームでは問題になる可能性があります(おそらく一人称シューティングゲーム)。回避策はhttp://javolution.org/のような低レイテンシーのライブラリーを使用することですが、これらはゲームよりも高頻度の取引やリアルタイムシステムをよりターゲットにしているようです。
  • 低レベルの最適化を活用する能力の欠如-Java JITコンパイラーは信じられないほど優れていますが、回避できないいくつかの制約(たとえば、配列の境界チェック)を強制します。この種のことを最適化するためにネイティブマシンコードレベルのアクセスを取得する必要がある場合は、おそらくJavaよりもC / C ++を好むでしょう。

考慮すべき展開オプションもいくつかあることに注意してください。

  • アプレット -ユーザーにとって非常に便利なブラウザで実行されますが、アプレットはセキュリティ上の理由でできることにおいてかなり制限されています。アプレットに署名して追加のセキュリティ権限を取得できることに注意してください。ただし、これにより、ほとんどのユーザーに少し怖いプロンプトが表示されます。
  • Java Web Start-完全なローカルダウンロードが必要で、ローカルシステムリソースにアクセスする必要がある、より洗練されたゲームに適しています。また、プラットフォームに依存しない方法でも機能します。おそらく、中規模のゲームや、アプレットのセキュリティ制限を回避する必要があるものに最適なルートです。
  • インストーラーのダウンロード -他の言語と同じように、Javaゲームのインストーラーを作成できます。インストーラーにはプラットフォーム固有の機能がある傾向があるため、もちろん設定とテストにはもう少し手間がかかります。
  • Web -HTML5 Webアプリケーションを作成し、純粋にサーバー側でJavaの長所を利用できます。マルチプレイヤーWebゲームを検討する価値があります。

最後に、他のいくつかのJVM言語も検討する価値があります。これらは上記のJavaプラットフォームのすべての利点を備えていますが、一部はJava自体よりも優れた言語であると考えています。Scala、Clojure、Groovyは最も有名なものであり、上記のJavaツールとライブラリをすべて使用できます。


1
JWSは、アプリをブラウザから分離する以外に、アプレットにあまり追加しません。どちらの場合でも、OpenGLライブラリを使用している場合は、コードに署名する必要があると思います。
ピーターテイラー

2
ローカルシステムへのアクセスは、多くの深刻なゲーム、特にマルチプレイヤーにとって、アプレットの制限を超える「非常に大きな」ものだと思います。HTML5はすっきりしていますが、多くのブラウザでGLやSocketsのような重要なビットがオフになっていて、オーディオはまだゲームでの使用にはまだ適していません。
パトリックヒューズ

1
@PatrickHughes、大きな怖いダイアログなしでJWSからローカルシステムにアクセスする場合は、コードに署名する必要があります。通常、署名されたアプレットもローカルシステムにアクセスできます。
ピーターテイラー

Inno Setupを使用してJavaゲームを配布することもできます。
マフムードホッサム

1
LIBGDXをパッケージのリストに追加して、独自のエンジンを作成するのに役立ちます。さまざまなプラットフォーム、さらにはAndroidからOpenGL ESまでのセットアップとJNI最適化があります。
パトリックヒューズ

4

MinecraftとMatter that MatterはどちらもJavaで構築されているため、ゲームを作成するのに十分です。Javaを使用しているときに遭遇する主な問題は、そのルートに進んでネイティブアプリを作成することを選択した場合、モバイルプラットフォームに移植することです。Androidは、独立したライブラリを備えた一種のフランケンシュタインJava SEです。RIMのBlackberryはJava MEを使用します。iOSは理論的にはJavaでプログラミングできますが、そのプラットフォームにはObjective-Cの方が適していると思われます。

JavaはC#によく似ています。Javaしか知らなくても、C#コードは理解できることがよくあります。それらは異なる設計哲学を持っていますが、最小限の手間で広く展開できる限り、両方とも法案に適合します。C#は、ゲームの展開においてひどい選択ではありませんが、モバイル展開はより難しくなり、Windows以外のプラットフォームへの展開は、使用する特定の外部ライブラリなどに応じて、より時間がかかるか困難になります。


1
Java on mobile:一度コンパイル、どこでもデバッグ: '(
。– deadalnix

0

最も明白で抵抗の少ない方法は、HTML5 + javascriptコンボを使用することです。これを使用して作成されたアプリケーションまたはゲームは、ほぼすべてのデバイスとブラウザーで実行されます。

利点:-さまざまなプラットフォームやデバイスでゲームを実行するためのゼロ構成が必要になります。

注:-上記のテクノロジーを使用してビルドされたゲームはほとんど見ませんでしたが、サイズが小さかったです。しかし、牛乳からバターを作ることができれば、チーズは不可能ではないと思います


0

あなたは使用することができスカラ座やスキームBiglooをお使いのJavaゲーム内で強調したコードやparrallelアクションのJVMを使用するようにEclipseを。

パターン設計とUML2では、OCLでコードを保護することもできます。すべてはTopcased.orgにあります。

これらのツールを習得するには時間がかかりますが、それらはJavaの背景であり、あなたをトップに押し上げる基盤となります。


-10

短い答え:いいえ。

Javaはバイナリ実行可能ファイルを生成せず、C#と同様にバイトコードのみを生成し(CLI)、これは2つの主な理由で「オープン環境」での深刻なビジネスには適していません。

  • 特にJavaのような古くて本当によく知られている言語では、リバースエンジニアリングに閉じ込められる可能性が非常に高い
  • マシンのパフォーマンスを完全に制御することはできません。Javaの場合、JVMが完全な制御を行う大きな役割を果たします。

もちろん、すべての言語には独自のライブラリがありますが、それぞれの言語に膨大な数のライブラリがあるため、これは実際の問題ではなく、このトピックの目的ではないと思います。

たぶんプロのレベルでは、すべてのC#ステートメントを実際のマシンのアセンブリコードに変換できるdev-Kitのようなルールを破ることができるものを見つけることができますが、この種のアプローチがカードになければ強制的に強制されますオープン環境で製品を販売する場合は、開発用のCおよびC ++のみを考慮してください。

実世界のROMのソースが一般に公開されていないという事実を考慮してAndroidは実際には閉じられているため、モバイルデバイスにとっては物事が少し異なります。Androidはオープンソースと考えられますが、 actualsデバイスのROMの%はそうではありません。この場合、あまり議論することはできません。すべてがすでに設定されており、すべてのプラットフォームには、誰もが知っているような独自の言語があります。

最終的に、この製品をオープンな環境で販売する場合、コンパイルされたバイナリ/アセンブリコードを生成できる言語のみを提案できますが、クローズドな環境では、さまざまな理由で決定が一般的に簡単になります。


7
コンパイルされたバイナリは、バイトコードバイナリよりリバースエンジニアリングが難しいと思われます。それには少し真実があるかもしれませんが、多くはありません。実際、おそらくCLIまたはJavaバイトコードよりもx86およびx64の逆アセンブラーを使用できる人の方が多く、IDA Proのようなツールがどれほど役立つか驚くでしょう数年前-おそらくもっと簡単になりました)。難読化されたバイトコードファイルは、リバースエンジニアリングが難しくなる場合があり、いずれにしても、ほとんどの人は気にする必要がほとんどありません。
Steve314

2
気にする理由がほとんどないのはなぜですか?さて、何人が独自の低レベルのプロプライエタリゲームエンジンを書いていますか?そして、たとえそれを行ったとしても、誰かがあなたのものを盗む可能性はどのようなものですか(リバースエンジニアリングが必要で、ドキュメントがないなど-開発言語が何であれ、多くの時間を無駄にします)よく文書化された無料のオープンソースエンジン?完全なプログラムの著作権侵害は、コードアイデアを盗むためのリバースエンジニアリングよりもはるかに現実的な懸念であり、海賊版はネイティブコンパイルされたコードによって少しも抑止されていないようです。
Steve314

1
抽象化のレベルでは、JVM命令は非常に低レベルです-ハードウェアの場合とまったく同じではありませんが、基本的にはアプリケーションレイヤーの抽象化から遠く離れています。抽象化レイヤーの数が標準Javaライブラリーにある場合、プラットフォームと最終アプリケーションの間に本当に少ないレイヤーがあることを意味します。とにかくCとC ++で通常発生することを除いて(なぜlibpngなどを再発明するのか)-ほとんどの人は、広く知られているプラ​​ットフォームのセットを効果的に形成する共通ライブラリを使用し、優れたリバースエンジニアリングツールがそれらを認識できます。
Steve314

3
要件を満たすには、すべてのコードをFPGAで出荷し、エポキシ樹脂で包む必要があります。驚いたことに、ブラックボックスチップパッケージでさえ、常にリバースエンジニアリングが可能です。その後、Intelのような強力な大企業でさえ、CPUパッケージにバグを導入するため、エポキシが埋め込まれたハードウェアブラックボックスは、ハードウェアライブラリにさらされることになります。最後に、あいまいさによるセキュリティの呼び出し、それは機能しません。Reductio ad abdardum、私は知っていますが、元の答えもそうです。
パトリックヒューズ

3
残念ながら、私はあなたに投票するほどの評判はありません。すべての引数が失敗します。C、C ++、またはその他の言語で作成されたゲームをデコード、逆コンパイル、ハッキングする人々がいるため、バイナリパッケージであってもセキュリティはあまり向上しません。さらに、OPがこれを懸念している場合、非常に優れたJava難読化ツールがたくさんあります。マシンのパフォーマンスの完全な制御については、ほとんどのCおよびC ++プログラマーにもこれはなく、良いコードを書くだけで、コンパイラーは必要なものを最適化します。そして、それが問題であったとしても、JNIまたはJNAを使用できます。
ビクターStafusa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.