なぜJavaはゲーム開発により広く使用されないのですか?[閉まっている]


77

私はゲーム開発者でも何でもありませんが、Javaはゲーム開発にあまり使用されていないことを知っています。Javaはほとんどのゲームで十分に高速である必要があります。いくつかの理由が考えられます。

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

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


37
そして、「Javaが遅く、C ++が速い」というすべての答えが、非常に広範で完全に正しい方法で問題の表面に実際に触れているだけです。この方法で答える人は、ほぼ間違いなくプロのゲーム開発者ではないことに注意してください。
エドS.

20
実際、Java ゲーム開発に使用されます。すなわち、モバイル市場で。Java ME、Android。
user281377

21
なぜそれを使用する必要がありますか?Javaは、より広く使用されている言語にはないゲーム開発者に何を提供しますか?Javaはビジネスアプリケーション開発者に非常に豊富なエコシステムを提供し、言語としての欠点を上回りますが、ゲーム開発に関しては、Javaプラットフォームは多くの選択肢に比べてほとんどツールを提供しません。
back2dos

14
興味深いことに、MinecraftはJavaベースです。
ウリ

5
@Coder C ++コードは大幅に最適化されているように見えますが、Javaコードは最適化されていません。したがって、無効な比較です。
イズカタ

回答:


94

いくつかの理由:

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

Javaは最近、主にAndroidプラットフォームで使用されているため、Javaゲームで主に使用されています。


14
+1「ほとんどのコンソール(360、PS3など)にはJVMがないため、PCバージョンのコードを再利用できません。C++コードをコンパイルしてさまざまなデバイスをサポートするのがはるかに簡単です」デバイスにランタイムがない場合、使用できないランタイムに基づいて開発されたゲームは表示されません。Xbox 360とWindows Phoneは.Netランタイムを管理しているため、それらを使用したゲーム開発が可能です。ただし、ランタイムは他の主要なプラットフォーム(PS3、およびそれほどではないがWii)にはないため、完全に独立したコードベースを正当化するのは困難です。本当にパフォーマンスの問題ではありません。
JustinC

2
XNAと呼ばれ、現在.Net 2.0フレームワークのサブセットです。野生には、他にも興味深いフレームワークがいくつかあります。MonoXNA、MonoTouch、XnaTouchなどがあります。
JustinC

7
JVMではパフォーマンスの予測可能性は不可能です。
クライム

5
非常に良い点。ただし、GCが予測できない一時停止/ロードを引き起こす可能性があるという事実を追加します。これがサーバーアプリにとって問題でない場合は、リアルタイムゲーム用です。これは、たとえばMinecraftで表示されます。
deadalnix

2
それはともできません@Klaim mallocnew、そのためには心配だ場合、あなたがどんなプーリングを実装しないつもりです。その点とは関係なく、Javaの大きな問題は、C#とは異なり、値型をサポートしていないことです。
ドーバル

80

技術的な理由:

  • 最高の3Dゲームエンジンのほとんどは、C / C ++で記述されています。ほとんどのゲーム開発者は3Dエンジンで妥協したくはありませんが、ゼロから作成したくないので、これは大したことです。JavaにはjMonkeyEngineがあり、これはオープンソースであり、実際には非常に優れていますが、Unreal Engineとはまだ競合できません。
  • 非常にまれな状況では、Cまたはアセンブリ言語で「金属に近づく」こと、特に特別なハードウェア機能へのアクセスに利点があります。これは最近ではそれほど重要ではありませんが、プロのゲーム開発者はまだオプションが必要です.....
  • Javaには、ガベージコレクション、ランタイムの管理があります。99%の時間はこれが大きな利点であり、間違いなくコーディングが容易になり、エラーが発生しにくくなり、Javaが非常に人気がある大きな理由の1つです。ただし、ガベージコレクションサイクルにより顕著な一時停止発生する可能あるため、ゲームの待ち時間の問題発生することがあります。これは、新しい低遅延JVMの問題ではなくなりつつありますが、高いFPSを維持することが重要なグラフィカルに集中したゲームの問題です。

非技術的な理由:

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

興味深いことに、ゲーム開発者 Java 考慮する必要がある理由もいくつかあります。

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

19
いいえ、ビデオゲームの世界ではJavaの方が収益性は良くありません。ほとんどのコンソールにはJVMがありません。移植性の理由から、ビデオゲームの世界ではJavaよりもC ++が好まれています。
deadalnix

5
ライブラリエコシステムがJavaのボーナスであるのはなぜですか?ネットワーキング、サウンド、キーと値のペア-それは問題ではありません。それは今日どこでも利用可能です。実際、C / C ++ライブラリ(fann、OpenCV)を使用すると、AIと画像処理がはるかに簡単になると主張します。
MrFox

4
FPSよりも重要なことは、一貫したフレームレートを強調することです。100FPSでゲームを実行することはできますが、これらのフレームの一部に0.5秒かかる場合、それは実行されません。GCが高速であっても、顕著な不規則性を引き起こす場合、それは依然として問題です。(これは特にJavaのパフォーマンスとは関係なく、念頭に置くべき一般的な問題です)
ガンクロ14年

1
Javaで一人称シューティングゲームを作成しました。ガベージコレクターを低遅延で使用していなくても、ガベージコレクターで問題が発生したことはありません。とにかく、メモリがJavaヒープに割り当てられていない場合、ガベージコレクタなしでメモリを処理するかどうかは私次第であり、メモリフットプリントのほとんどはVBOからのものです。言い換えると、ガベージコレクションは、GPUまたはネイティブヒープ(!= Javaヒープ)で大きなオブジェクトを処理するために設計された目的に使用されるときに機能するため、問題ではありません。あなたの歯を磨くの効率的な手段ではないために金床を非難しないでください。
-gouessej

1
@deadalnixビデオゲームの世界は、コンソールだけで構成されているわけではありません。
-gouessej

27

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

私はゲームビジネスを非常によく知っており、25年間そのビジネスに携わってきました。また、ゲーム内のJavaがSunのJava Gameの技術的エバンジェリストであり、Javaパフォーマンスプログラミングの専門家である講師であることも非常によく知っています。

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

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

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

ダイレクトメモリアクセスに関しては、Javaには長い間使用されてきました。ネイティブダイレクトバイトバッファの形式のJava 1.4以降。Javaでのビット調整は、符号なし整数型がないために少し面倒ですが、作業ラウンドはすべてよく知られており、それほど面倒ではありません。

真のJavaにはDirect3Dバインディングがなかったが、Javaテクノロジーは移植性を追求しているためだ。2つのOpenGLバインディング(JOGLとLWJGL)とOpenALバインディング(JOAL)、およびWindowsのDirectInput、OSXのHIDマネージャー、Linuxバインディングにバインドするポータブル入力バインディング(JInput)があります(どれを忘れますか)。

UnityのようにJavaを完全なゲームエンジンが搭載していないことは事実であり、UnityはC#を搭載しており、独立した領域の弱点です。一方、Windows、OSX、Linuxで完全にプラットフォームを移植できる2つの優れたScenegraphレベルのAPIがありました。どちらもJosh Slackによって書かれました。最初はJMonkeyエンジンと呼ばれ、2番目はArdor3Dと呼ばれていました。

一番上のポスターは、Javaをゲーム開発に持ち込んだ2つの最大の要因は偏見と移植性であったということです。後者が最大の問題でした。Javaゲームを作成してWindows、OSX、Linuxに出荷することもできますが、コンソールVMはありませんでした。これは、Sunの中間管理職の全体的な不備によるものです。ゲームでJavaに取り組んでいる私たちの数人は、実際にはプレイステーションでVMを取得するために3回もソニーと取引をしており、3回すべてのサンの中間管理者がそれを殺しました。

サンはクライアントテクノロジーをいじりましたが、実際のところ、サンの経営陣は消費者向け製品を手に入れたことはありません。それが、Sunのクライアント言語としてのJavaがどのような形でも成功しなかった理由であり、Javaをプラットフォームで成功させるためにGoogleとDalvik(Android javaのようなVM)を必要とした理由です。

それが、今日私がゲームをC#でコーディングしている理由です。モノがサンの経営陣が拒否したところに行ったからです。


8

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


JNIを自分で記述する必要はありません。JogAmpまたは同様のライブラリを使用してください。
-gouessej

いい視点ね。JavaでJOGLとJMonkeyEngineを使用しました。私は、XNA / MonoGameをDirectXに使用し、OpenTKをOpenGLに使用して、C#でnvorbis / naudio / openalを使用しました。また、特にシェーダーを使用する場合は、中小規模のゲームに最適です。C ++を超える生産性の大幅な改善。それからあなたの唯一の本当の問題はGCベースの言語と同じです:GCの防止/軽減。フレームレートが定期的に停止するので、固定サイズの配列、静的割り当て、またはゲームプレイがストールしたときに放り投げられる長生きのバッファー(メニュー、読み込み、シネマティクス)が必要になります。
グレアムウィックステッド

2006年からJOGLを使用していますが、デスクトップ環境の非常に低価格のハードウェアでもこの種の問題は発生していません。最大のオブジェクトはGPU RAMまたはネイティブヒープ(通常は直接NIOバッファー)にあることが多く、前​​者は「通常の」ガベージコレクションによって管理されておらず、後者はそうではないため、ガベージコレクターのせいではありません。 Javaヒープ上のJavaオブジェクトを処理するため、「通常の」ガベージコレクションによって直接管理されます。ネイティブヒープに割り当てられたメモリを効率的に解放するのは開発者次第です。
-gouessej

私の謙虚な意見では、この問題は、ガベージコレクターが仕事をするのを妨げるJavaの考え方を持たないプログラマーによって想像された「最適化」に起因します。いくつかのネイティブリソースにリンクされているいくつかの役に立たないJavaオブジェクトの強力な参照を保持している場合、ガベージコレクターはそれらを再生可能とは見なしません。ヒープ外割り当ては場合によっては便利ですが、それを悪用すると、長生きするリソースがメモリに残り、新しいオブジェクトを作成できなくなります。
gouessej

一部のゲームプログラマーは、最初に巨大なバッファーを割り当て、実行時にスライスし、このメモリを自分で管理することを好みますが、おそらくオペレーティングシステム、そしてJavaが新しいオブジェクトを作成するためにいくらかのスペースを解放するために多くの時間を費やします。Javaではメモリリークを回避することは難しくなく、より実行可能なソリューションは、メモリがJavaヒープに割り当てられていないオブジェクトのみを追跡し、適切なタイミングでそれらを解放することです(一時停止中、レベルから別のオブジェクトに切り替えるとき) 、...)、ガベージコレクターとは関係ありません。
-gouessej

5

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

より単純なゲームでは、Javaを非常に効果的に使用できます。テトリスのクローンや宝石をちりばめたもの、またはその詳細レベルの何かを作成したい場合は、Javaで問題なく動作します。しかし、JavaはHalo、Medal of Honor、Command&Conquerなどのゲームを作成してプレイできるようにすることはできません。少なくとも現在のように。

また、質問にリストした理由も有効です。Javaの専門知識を持つゲーム開発者がいないことを除いて、私は思う。携帯電話やその他のポータブルデバイスのゲームの多くはJavaで記述されており(ほとんどのAndroidゲームを含む)、一部のゲームは非常に優れています。ですから、Javaの知識を持つゲーム開発者の基盤はまともで、成長していると思います。

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


17
最も重要なポイントの1つを省略します。使用するツールとAPIの大部分はC ++で記述されており、Javaまたは他の言語で動作するように書き直すのは大変な作業です。また、「[JavaはC ++ / Assemblyを使用するよりもはるかに遅い」」という一般化は広すぎて正確ではありません。優れたコンパイラーは、アセンブラーを作成するよりも効率的なコードを生成する可能性が高いため、PCゲームで考えるほど頻繁にアセンブリーを使用することはありません。ただし、確定的なリソースの使用とハードウェアを適切に使用する能力が必要です。
エドS.

15
誰かが本当にMinecraftよりもJavaの機能の良い例を作成する必要があります。誰かがWoWまたはC&CまたはMOHまたはStarcraftに相当するものをJavaまたはC#で作成できるようになるまで、私が言ったことを保持し続けます。
BBlake

12
「アセンブリは、PCゲームで思うほど頻繁には使用されません。なぜなら、優れたコンパイラーは、アセンブラーを書くよりも効率的なコードを生成する可能性が高いからです。」それは別の一般化です。経験のあるIA32アセンブリ言語プログラマーよりも優れたIA32マシン言語を生成できるコンパイラーはまだありません。コンパイラは、ターゲットマシンにマッピングされる抽象マシンのコードを生成します。アセンブリ言語プログラマーは、機械イディオムを含む、基礎となるプロセッサーを最大限に活用します。
ビットツイダー

10
メモリ使用量を忘れないでください。メモリの使用はおそらく速度よりも重要です。JavaはC ++やガベージコレクターのような直接メモリ制御用に設計されていないため、同じタスクでメモリ使用量は常にC ++よりも大幅に多くなります。
マシュー

9
これは1985年ではありません。640k以上のメモリ、50 mghz以上のプロセッサ、1.44 MB以上のリムーバブルストレージがあります。今日のゲーム開発者の挑戦は、25年前と同じではありません。先に進んで、現代のゲーム用に手作りされたx86 /またはia64コードの例を見つけてください。ある種の神話は単純に間違っています。課題は移植性であり、比較的古い運用環境を使用するダウンレベルのクライアントです。最小公分母対説得力のあるイマージョン。
ジャスティン

5

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

2002年にさえ、ジェイコブ・マーナーは、「ゲーム開発のためのJavaの評価」というレポートで、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のいずれかを意味します。


1
oddlabs.com/technology.php-「LWJGLとJavaの組み合わせに基づいて開発を行ったため、LWJGLがサポートされているプラ​​ットフォームで、プラットフォームに依存しないネイティブコードに匹敵する速度でゲームを実行できます。」

Jake2は10年以上前にQuake2よりも優れていました。2002
gouessej17年

4

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


4

ほとんどの人にとっての制限要因は、優れたゲームエンジンの(不足)可用性だと思います。非常に遠くまで到達するには、それらが利用できない理由を調べる必要があります。

私はそれを他の方向からちょっと見ます。ゲームエンジンの開発(たとえば)は、大変な作業です。誰が開発に時間と労力を費やして開発することで十分な恩恵を受けるでしょうか?

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

私が考えることができるほぼ唯一の候補者は、まったく妥当であると思われるGoogleです。Androidの主要な開発言語はJavaであり、Android向けのゲーム開発を奨励することは、プラットフォームに真の利点をもたらす可能性があります。

私の知る限り、彼らはまだ(まだ?)そうしていないので、他のほとんど誰にもかなり厳しい制限が残っています。Javaで開発を使用するための最新の高性能ゲームエンジンを少しも使用しないと、かなりの余分な作業が必要になります(そのように見えますが)その余分な作業の見返りに多くの利益を生み出す見込みはほとんどありません。


ゲームエンジンで重要な問題に遭遇したと思います。これがJavaがC / C ++に追いついていない最大の理由だと思います。しかし、オープンソースが競技場を少し平準化する可能性があります-jMonkeyEngine(jmonkeyengine.com)には非常に感銘を受けました。
ミケラ

ゲーム開発者は全体的に(技術的に)非常に保守的であり、大規模な(影響力のある)ショップのほとんどは何十年も存在し、C(++)/ ASM中心であるため、Java開発に投資しないことを忘れないでください。 C(++)/ ASMアーキテクチャ全体を展開する準備が整ったら、事前に時間、お金、およびその他のリソースを多額に投資することを意味します。
ジュウェンティング

1

質問は、次の行で何かを尋ねることと同等です:

あなたの車、ボートエンジンまたはジェットエンジンに動力を与える方が良いもの。

それは、スケーラビリティ、バグ回避、速度、メモリシグネチャ、モジュール性、およびあらゆるものに帰着します。質問は、業界標準として何が優れているかについてではなく、あなたが知っていることやどれだけよく知っているかなど、「私にとって何が良いか」であるべきです。それが仕事をするなら、それは仕事をします、あなたが実際にアイデアを売ることができるなら、それは働きます、そして、あなたが少数のスプーンを曲げさえするかもしれないことを知っている人。


0

Javaは、ゲーム開発を念頭に置いて作成されたのではなく、「Web用」の言語になるように作成されました。

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

魅力的なゲーム開発フレームワークの欠如が、この点でJavaを本当に殺したものだと思います。


3
しかし、C ++はゲーム言語としても作成されませんでしたが、Cのようなシステムプログラミング言語として作成されました。実際、SunはJavaをゲーム言語としていくつか努力しました。何か、しかしそれは決して起こらなかった
...-アント

1
@Phobia:しかし、システムプログラミング用に設計されました。
アント

1
@Phobia:私は言っている、それがあること、汎用プログラミング言語だけでC ++のように、。あなたの答えでは、Javaはゲームプログラミング言語として設計されていないと言いますが、C ++もそのように設計されていないことを忘れます。
アント

2
@Joe Blow:Cに関するウィキペディアのページから:「Cはシステムソフトウェアを実装するために設計されましたが、ポータブルアプリケーションソフトウェアの開発にも広く使用されています。」それはかなり明確だと思いますか?
アント

2
@Phobiaあなたの個人的な好みについてすみませんが、それらは議論とは完全に無関係です。さらに、最近ではC ++がアプリケーションプログラミングでほぼ独占的に使用されていることを争いたくはありません。これはこの議論の目的ではありません。JavaはWebプログラミングを念頭において設計されたというあなたの主張。C ++は、システムプログラミングを念頭に置いて設計されました。そのデザイナーは言います。議論の終わり。
コンラッドルドルフ

-1

Cをより直接、新しい型にはまらないハードウェアとドライバーに直接接着する方が簡単です。ゲームプログラマがより早く、より近いハードウェアにアクセスできるほど、競合するゲームの仕様を上回ることができます。後のゲームプログラマーは、以前の実績のあるゲームと同じ方法論とツールを使い続けるだけです。

カジュアルな携帯電話ゲームなど、最新のハードウェアへの最適化がそれほど重要ではないゲームでは、この方法でCを使用することは、Javaの移植性よりも重要ではありません。


-4

一部の人々にとっては、速度、ライブラリ、または可用性とは何の関係もありません。それは単に言語自体のせいです。一部の人々は、単にJavaの言語が好きではありません。他の人々は、Javaを使用してゲームを作成する代わりに、お気に入りのプログラミング言語を使用したいと考えています。


これはコメントのようなものです。回答方法
-gnat

-8

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

これはインタープリター言語、つまり遅いです。ハードウェアであるグラフィックとグラフィックカードを扱っています。ハードウェアを扱うのに適した言語は何ですか?まあC ++、それはかなり低いです、そして、あなたはポインターと何でも扱います。

crysisのようなクレイジーなグラフィックや、Javaを使用するつもりのないものを送り出したい場合。

それだけでなく、OracleはJavaを所有しています。会社があなたを訴えることができるという考えは、大胆ではありません。特に、断片化FUDにより訴えられることなくゲームをターゲットとするJAVA用の独自のインタプリタを構築する場合。


1
あなたは真剣にJITコンパイルについて読み、そしてJavaはC ++に対して置かれたいくつかのベンチマークを見なければならない
ANTO

1
一体誰がこの答えに投票しましたか?この質問全体が信じられないほどばかげている!深い悲しみ。
ファッティ

7
@Joe答えは間違っています。Javaは解釈されません。
コンラッドルドルフ

3
@Antoこれらの愚かなベンチマークを忘れてください。C ++ 、カウントするJavaよりも桁違いに高速です。programmers.stackexchange.com/ questions / 29109/29136#29136およびProgrammers.stackexchange.com/questions/368/13888#13888を参照してください。
コンラッドルドルフ

1
@Anto何を見ると思う?速度?C ++。メモリ使用量?C ++。Minecraftを見て、サーバーをホストしてみて、ゲームが占有しているメモリの量を確認してください。JavaはC ++と比べてはるかに多くのメモリを消費します。オンラインゲームを作成することは、Javaではかなり難しいと思います。私がこれまでに見たすべてのベンチマークは、より多くのメモリを消費します。現在、MMORPGゲームでは、中央サーバーがJavaでコーディングされているので、MMORPGでメモリの側面を無視するか、massiveの定義を変更する場合にのみ、素晴らしいサウンドに聞こえます。
神話上の
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.