私はゲーム開発者でも何でもありませんが、Javaはゲーム開発であまり広く使用されていません。Javaはほとんどのゲームで十分高速であるはずです、それでどこが問題なのでしょうか?私はいくつかの理由を考えることができます:
もちろん、それは他の何かかもしれません。私よりビジネスをよく知っている誰かが、ゲーム開発に関してJavaが勢いづいていない理由を説明できますか?
いくつかの理由:
Javaは主に最近のAndroid=ゲームで使用されています。これは、Javaがそのプラットフォームの主要言語だからです。
技術的な理由:
非技術的な理由:
興味深いことに、ゲーム開発者がJavaを検討する必要がある理由はいくつかあります /
さて、このスレッドには多くの誤った情報があります。
私はゲーム業界を知っています非常によく、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の経営者が拒否したところに行ったからです。
Javaは、ビジネスロジック、サーバー、および信頼性の高い方法で実行する必要のあるプラットフォームに依存しないコードに最適です。 Javaがゲームで頻繁に使用されない理由はいくつかあります:
Java(JNIレイヤーを作成))や.net(マーシャリング/アンマーシャリング、api /構造属性の多く)などのバイトコード言語のC++ライブラリを使用するのは簡単ではありません。少しの利益のために少し仕事。
補足:一部のゲームサーバーはJavaを使用しています。
同様の投稿はこちら: https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java
Javaは、ほとんどのゲーム開発に十分な速度ではありません。標準のC++/Assemblyを使用するよりもはるかに低速です。これは、C#またはVBを使用してより多くのゲーム開発が行われないのと同じ理由です。ゲーム開発者は、物理計算、AIロジック、環境との相互作用などを手に入れることができるすべての最後のクロックサイクルを必要とし、計画します。
より単純なゲームの場合、Javaは非常に効果的に使用できます。テトリスクローンやビジュエルド、またはその他の詳細レベルの何かを作成する場合は、Javaが適切に機能します。ただし、Javaは、Halo、Medal of Honor、Command&Conquerなどのゲームを作成してプレイ可能にすることはできません。少なくとも今日のように。
そして、あなたがあなたの質問にリストした理由も同様に有効です。ただし、Javaの専門知識を備えたゲーム開発者が不足している場合は除きます。電話やその他のポータブルデバイスの多くのゲームはJava(ほとんどのAndroidゲームを含む)で書かれており、一部のゲームは非常に優れています。ですから、Javaの知識を持つゲーム開発者のまともで成長している基盤があると思います。
より高度なゲームのいくつかでこれらの高水準言語を使用する能力について考えが変化しています。たとえば、私のお気に入りのゲームの1つであるAuranのTrain Simulatorは、C#で大部分が記述されており、非常にうまく機能します。したがって、ベースは成長しており、進化し続けます。
現代のゲームはすべて、特別な目的のハードウェアで発生する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のどちらかを意味します。
ゲーム開発者は金属の近くにいることを好み、多くの場合、アセンブリでタイトな内部ループを作成します。 Javaは、一貫した速度とメモリ使用の両方の点で、同じレベルの可能なパフォーマンスを提供しません(JITを実行すると負荷がかかります)。
ほとんどの人にとっての制限要因は、優れたゲームエンジンの可用性の欠如です。遠くまで行くには、なぜそれらが利用できないのかを調べる必要があります。
それを少し反対の方向から見てみましょう。 (たとえば)ゲームエンジンの開発はlotの作業です。開発に時間と労力を費やすために開発することで十分なメリットがあるのは誰ですか。
Java(たとえば、IBM、Oracle))のフレームワークのような開発の明らかな候補のほとんどは、ゲームへの関心がまったくないようです。ゲーム開発の明らかな候補(たとえば、Id、EA )Javaにはほとんど同じように関心がないようです。
ほぼonlyと私が考えることができる候補者は、Googleであることがまったく合理的であると思われます。 Android=の主要な開発言語はJavaであり、Android couldのゲーム開発を奨励することで、プラットフォームに真の利点がもたらされます。
私の知る限りでは、彼らはそうしていませんが(まだ?)、ほとんどの人にとってかなり厳しい制限が残っています。 Javaで開発を使用する現代の高性能ゲームエンジンの邪魔をすることなく、かなりの追加作業が必要になります。その余分な仕事と引き換えに利益を得る。
問題は、次のような質問をすることと同じです。
あなたの車、ボートエンジン、ジェットエンジンに動力を与えるために何が良いですか。
それは、スケーラビリティ、バグ回避、速度、メモリ署名、モジュール性、そして全体のホストに帰着します。質問は、業界標準として何が優れているかということではなく、あなたが何を知っているか、どれだけよく知っているかのように、「私にとって何が良いか」という質問でなければなりません。それが仕事をするなら、それは仕事をします、あなたが実際にアイデアを売ることができるなら、それはうまくいきます、そしてあなたが数スプーンを曲げさえするかもしれないことを誰が知っているでしょう。
Javaはゲーム開発を念頭に置いて作成されたのではなく、Java=は「ウェブ用」の言語として作成されました。
ゲーム開発に関しては、MicrosoftがC#を支援していたため、Sunは実際にはゲーム開発言語としてJava=をサポートしていませんでした。
私は、魅力的なゲーム開発フレームワークの欠如がこの面で本当に殺されたものだと思いますJava.