web-dev-qa-db-ja.com

Javaがゲーム開発により広く使用されていないのはなぜですか?

私はゲーム開発者でも何でもありませんが、Javaはゲーム開発であまり広く使用されていません。Javaはほとんどのゲームで十分高速であるはずです、それでどこが問題なのでしょうか?私はいくつかの理由を考えることができます:

  • Javaの専門知識を持つゲーム開発者の不足
  • 優れたゲーム開発フレームワークの欠如
  • プログラマーは、Javaをゲームプログラミング言語として受け入れたくありません。ほとんどがC++のみを受け入れますか?
  • ゲーム機はサポートされていません(PC市場はまだ存在しています)

もちろん、それは他の何かかもしれません。私よりビジネスをよく知っている誰かが、ゲーム開発に関してJavaが勢いづいていない理由を説明できますか?

81
Anto

いくつかの理由:

  • 昔は、パフォーマンスとUIのために「直接アクセス」が必要でした。これはVM JavaおよびC#のような言語です。
  • ほとんどのコンソール(360、PS3など)にはJVMがないため、PCバージョンのコードを再利用できません。 C++コードをコンパイルしてさまざまなデバイスをサポートする方がはるかに簡単です。
  • ほとんどの主流のゲームエンジン(Unrealなど)にはC++バインディングがあります。いくつかのJavaコネクタ(たとえば、OpenGL用))がありますが、そのようなものはありません。
  • PCゲームの場合、DirectXは実際には強力なJavaサポートを備えていません(あるとしても)。
  • WebベースのゲームはJavaScriptまたはFlashで実行されます。あなたはそれらをJavaで書くことができますが、GWTのようなものを使用します。
  • IPhoneはObjective-Cバリアントを実行します。

Javaは主に最近のAndroid=ゲームで使用されています。これは、Javaがそのプラットフォームの主要言語だからです。

95
Uri

技術的な理由:

  • 最高のDゲームエンジンのほとんどはC/C++で記述されています。ほとんどのゲーム開発者は3Dエンジンに妥協したくないが、ゼロから作成したくないので、これは大きな問題です。 Javaには jMonkeyEngine があり、これはオープンソースであり、実際には本当に良いですが、それでも nrealエンジン
  • 非常にまれな状況では、Cまたはアセンブリ言語で"close to the metal"を取得すると、特に特別なハードウェア機能にアクセスできるという利点があります。これは今日ではそれほど重要ではありませんが、プロのゲーム開発者はまだ選択肢があることを望んでいます。
  • Javaにはガベージコレクション、マネージランタイムがあります。 99%の確率でこれは大きな利点です。確かにコーディングが容易になり、エラーが発生しにくくなり、Javaが非常に人気がある大きな理由の1つです。ただし、ガベージコレクションサイクル can によって顕著な一時停止が発生するため、ゲームのレイテンシの問題が発生することがあります。これは、新しい低レイテンシJVMでの問題は少なくなっていますが、高いFPSを維持することが重要であるグラフィック集約型のゲームでは依然として問題です。

非技術的な理由:

  • プロのゲーム開発会社は、C/C++のスキルとテクノロジーに多額の投資を行っています。これにより、大量の慣性が作成されます。
  • 主に不合理な知覚 Javaは遅い。おそらく90年代は真実かもしれませんが、今は間違いなく真実です-Java( Runescape だれでも、収益性の高い商用3Dゲームを書くことができますか?または Minecraft =?)
  • かなり公正な認識 Javaは、ゲームよりもビジネスアプリケーションとWebに重点を置いています。これは、モバイルの成長とクロスプラットフォーム開発の必要性によって変わる可能性がありますが、現在は確かに当てはまります。

興味深いことに、ゲーム開発者がJavaを検討する必要がある理由はいくつかあります /

  • Portability-ターゲットプラットフォームの数が増えるにつれて、Javaは、真にクロスプラットフォームのバイナリを作成する比類のない機能により、ますます魅力的になります
  • ライブラリエコシステム-3Dゲームエンジンの非常に重要な例外を除いて、Javaには、あらゆるプラットフォームで最も優れたライブラリの範囲があります。ネットワーキング、サウンド、AI、画像処理、キー/値データストア、あなたはトピックに名前を付けます、そしておそらくオープンソースのJavaライブラリがあります。
  • サーバー側の開発-Javaはサーバー用の優れた言語/プラットフォームであり、大規模なマルチプレーヤー要素を組み込んだゲームが増えるにつれて、サーバー側がますます重要になります。 LinuxでのJavaは、ここではプラットフォームとして非常に魅力的です。
  • The JVM-素晴らしいガベージコレクション、JITコンパイラ、同時実行サポートなどを備えた、おそらく世界で最も優れたVM実行環境です。これは、ゲームとして、さらに良くなるだけです。開発者は、ゲーム内で動的言語を使用するようになり、可能な限り最高のランタイム環境が必要になります。
  • その他のJVM言語-Javaは確かなod主力ですが、真の革新は新しいJVM言語(特にScala、Clojure)で起こっています。これらの言語は、Java/JVMプラットフォームのすべての利点を備えています。 plus これらの言語は、非常に強力な最新の言語です。
81
mikera

さて、このスレッドには多くの誤った情報があります。

私はゲーム業界を知っています非常によく、25年の経験があります。また、JavaゲームのJava $ ===は、SunのJavaゲームの技術的エバンジェリストであり、講義をしているJavaパフォーマンスプログラミングの専門家です。

計算速度の観点から、Javaは今日の多くの科学計算ベンチマークでC++を上回っています。必要に応じてパフォーマンスが悪いが、全体としては同等であるいずれかの言語で病理学的コードを書くことができます。と長い間されています。

メモリ使用量に関しては、Javaにはオーバーヘッドがあります。HelloWorldはJavaの4Kプログラムです。しかし、そのオーバーヘッドは今日のマルチGBシステムではかなり意味がありません。最後に、Javaは起動時間が長くなります。JavaをUnixコマンドラインコマンドのような短い実行時ユーティリティに使用することはお勧めしません。これらの場合、起動がパフォーマンスを支配します。ただし、ゲームはかなり手に負えません。

適切に記述されたJavaゲームコードはGCの一時停止の影響を受けません。C/ C++コードと同様に、アクティブなメモリ管理が必要ですが、C/C++のレベルまでは必要ありません。長期間存続するオブジェクト(レベルまたはゲーム全体で持続)と非常に短命なオブジェクト(ベクターなど、渡され、計算後にすぐに破棄される)のいずれかに対するメモリ使用量gcは、目に見える問題ではありません。

ダイレクトメモリアクセスの観点から、Javaは長い間それを行っていました; Java 1.4のネイティブダイレクトバイトバッファの形式。1.4でビットをいじる= Java符号なし整数型がないため、少し煩わしいかもしれませんが、作業ラウンドはすべてよく知られており、それほど面倒ではありません。

その真のJavaはDirect3Dバインディングを持ったことがありませんが、これはJavaテクノロジーが移植性を追求するためです。2つのOpenGLバインディング(JOGLおよびLWJGL)とOpenALバインディングがあります。 (JOAL)と、WindowsのDirectInput、OSXのHID Manager、およびLinuxバインディング(忘れてしまいます)の内部でバインドするポータブル入力バインディング(JInput)。

完全なゲームエンジンにJava=たとえば、Unityなど)の機能がないことは事実ですが、これは独立した空間の弱点です。一方で、2つの優れたシーングラフレベルAPIがありました。 Windows、OSX、Linuxで完全にプラットフォーム移植性があり、どちらもJosh Slackによって作成され、最初はJMonkeyエンジン、2番目はArdor3Dと呼ばれていました。

上のポスターは正しいですJavaゲーム開発に戻った2つの最大のものは偏見と移植性でした。後者が最大の問題でした。Javaゲーム、それをWindows、OSX、Linuxで出荷しました。コンソールVMはありませんでした。これは、Sunのミドルマネジメントが完全に無能だったためです。ゲームでJava=実際には、PlayStationでVM=を取得するためにソニーと3回以上の取引があり、Sunの3回の中間管理がすべてそれを殺しました。

Sunはクライアントテクノロジーをいじりましたが、問題は、Sunの経営陣が消費者向け製品を手に入れたことがないことです。 Javaがどのような形でも成功しなかった理由と、GoogleとDalvik(Android Java-like VM) Javaプラットフォームはどこでも成功します。

そして、それが今日私がC#でゲームをコーディングする理由です。なぜなら、MonoはSunの経営者が拒否したところに行ったからです。

29
user430788

Javaは、ビジネスロジック、サーバー、および信頼性の高い方法で実行する必要のあるプラットフォームに依存しないコードに最適です。 Javaがゲームで頻繁に使用されない理由はいくつかあります:

  • 境界チェックおよびその他の安全メカニズム(最近の限界パフォーマンスの違い)
  • c ++データ構造とJavaデータ構造の間で変換する必要があります(バッファ間でメモリをコピーするだけではできません)
  • 本やチュートリアルの多くは群集を追っているので、C++以外のゲーム開発者情報を見つけるのは難しい
  • コアグラフィックライブラリ(DirectXおよびOpenGL)および多くの既製のエンジンはC/C++ベースです。
  • 多くのゲームは、より視覚的に魅力的な機能を追加できるように、できるだけ速く実行しようとします

Java(JNIレイヤーを作成))や.net(マーシャリング/アンマーシャリング、api /構造属性の多く)などのバイトコード言語のC++ライブラリを使用するのは簡単ではありません。少しの利益のために少し仕事。

補足:一部のゲームサーバーはJavaを使用しています。

同様の投稿はこちらhttps://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java

9
Graeme Wicksted

Javaは、ほとんどのゲーム開発に十分な速度ではありません。標準のC++/Assemblyを使用するよりもはるかに低速です。これは、C#またはVBを使用してより多くのゲーム開発が行われないのと同じ理由です。ゲーム開発者は、物理計算、AIロジック、環境との相互作用などを手に入れることができるすべての最後のクロックサイクルを必要とし、計画します。

より単純なゲームの場合、Javaは非常に効果的に使用できます。テトリスクローンやビジュエルド、またはその他の詳細レベルの何かを作成する場合は、Javaが適切に機能します。ただし、Javaは、Halo、Medal of Honor、Command&Conquerなどのゲームを作成してプレイ可能にすることはできません。少なくとも今日のように。

そして、あなたがあなたの質問にリストした理由も同様に有効です。ただし、Javaの専門知識を備えたゲーム開発者が不足している場合は除きます。電話やその他のポータブルデバイスの多くのゲームはJava(ほとんどのAndroidゲームを含む)で書かれており、一部のゲームは非常に優れています。ですから、Javaの知識を持つゲーム開発者のまともで成長している基盤があると思います。

より高度なゲームのいくつかでこれらの高水準言語を使用する能力について考えが変化しています。たとえば、私のお気に入りのゲームの1つであるAuranのTrain Simulatorは、C#で大部分が記述されており、非常にうまく機能します。したがって、ベースは成長しており、進化し続けます。

5
BBlake

現代のゲームはすべて、特別な目的のハードウェアで発生する3Dグラフィックスに関するものです。

2002年にさかのぼっても、ジェイコブマーナーは彼のレポート「Evaluating Java for Game Development)」でJavaがゲームに非常に使いやすいことを発見しました。パーツ、そして言語と基盤となるJVMの堅牢性により、この方法で行う方が安価でした。

http://Java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

それ以来、特に3Dグラフィックスで起こった進歩と、OpenGLとの優れたバインディングにより、この不利益は最近ではそれほど顕著ではないというのが私の個人的な意見です。

したがって、問題は別の場所にあるはずです。考えられる理由は、Javaランタイムのサイズ(最近のマルチDVDゲームでは問題がはるかに少ない))と、既存のコードの慣性によるものです。作業を開始することは悪名高いJavaのネイティブコードを使用します。3番目の理由は、ゲームをしているスターの開発者が使い慣れていることです。4番目の理由は、Javaがプラットフォームで使用できるかどうかです。

ただし、確かなことが1つあります。ほとんどのゲームは、最初からすべてをCコードで書き込むのではなく、スクリプト対応に移行しており、スクリプト言語の下で最高のランタイムが必要です。最近では、これは本質的にCLRまたはJVMのどちらかを意味します。

5
user1249

ゲーム開発者は金属の近くにいることを好み、多くの場合、アセンブリでタイトな内部ループを作成します。 Javaは、一貫した速度とメモリ使用の両方の点で、同じレベルの可能なパフォーマンスを提供しません(JITを実行すると負荷がかかります)。

4
dan_waterworth

ほとんどの人にとっての制限要因は、優れたゲームエンジンの可用性の欠如です。遠くまで行くには、なぜそれらが利用できないのかを調べる必要があります。

それを少し反対の方向から見てみましょう。 (たとえば)ゲームエンジンの開発はlotの作業です。開発に時間と労力を費やすために開発することで十分なメリットがあるのは誰ですか。

Java(たとえば、IBM、Oracle))のフレームワークのような開発の明らかな候補のほとんどは、ゲームへの関心がまったくないようです。ゲーム開発の明らかな候補(たとえば、Id、EA )Javaにはほとんど同じように関心がないようです。

ほぼonlyと私が考えることができる候補者は、Googleであることがまったく合理的であると思われます。 Android=の主要な開発言語はJavaであり、Android couldのゲーム開発を奨励することで、プラットフォームに真の利点がもたらされます。

私の知る限りでは、彼らはそうしていませんが(まだ?)、ほとんどの人にとってかなり厳しい制限が残っています。 Javaで開発を使用する現代の高性能ゲームエンジンの邪魔をすることなく、かなりの追加作業が必要になります。その余分な仕事と引き換えに利益を得る。

4
Jerry Coffin

問題は、次のような質問をすることと同じです。

あなたの車、ボートエンジン、ジェットエンジンに動力を与えるために何が良いですか。

それは、スケーラビリティ、バグ回避、速度、メモリ署名、モジュール性、そして全体のホストに帰着します。質問は、業界標準として何が優れているかということではなく、あなたが何を知っているか、どれだけよく知っているかのように、「私にとって何が良いか」という質問でなければなりません。それが仕事をするなら、それは仕事をします、あなたが実際にアイデアを売ることができるなら、それはうまくいきます、そしてあなたが数スプーンを曲げさえするかもしれないことを誰が知っているでしょう。

1
Meh

Javaはゲーム開発を念頭に置いて作成されたのではなく、Java=は「ウェブ用」の言語として作成されました。

ゲーム開発に関しては、MicrosoftがC#を支援していたため、Sunは実際にはゲーム開発言語としてJava=をサポートしていませんでした。

私は、魅力的なゲーム開発フレームワークの欠如がこの面で本当に殺されたものだと思いますJava.

0
Mahmoud Hossam