web-dev-qa-db-ja.com

Javaはクロスプラットフォームのゲームに適していますか?

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

13

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

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

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

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

ゲームにおけるJavaの主な欠点は、実際には「エッジケース」にありますが、おそらく影響はありませんが、一部のクラスのゲームには関連があります。

  • 3Dエンジンの可用性-上記のツールとエンジンは優れていますが、Unrealなどの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ツールとライブラリを利用できます。

28
mikera

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

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

4
World Engineer

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

アドバンテージ:-さまざまなプラットフォームやデバイスでゲームを実行するための設定は必要ありません。

注:-上記のテクノロジーを使用して構築されたゲームをいくつか見ましたが、それらはより小型でした。でも牛乳でバターを作れるならチーズは無理じゃないかな

0
Pankaj Upadhyay

Eclipseで Scala およびScheme Bigloo を使用して、Javaゲーム内のストレスコードまたは並列アクションにJVMを使用できます。

パターンデザインとUML2を使用すると、OCLでコードを保護することもできます。すべてTopcased.orgにあります。

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

0
cl-r