Javaは深刻なゲーム開発に適していますか?[閉まっている]


64

私はインターネットを精査しましたが、Javaゲーム開発用のリソースはそれほど多くなく、C ++ほど多くはありません。実際、ほとんどのエンジンはC ++で記述されています。jMonkeyEngineで作成したゲームをプレイしようとしましたが、ゲームが非常に遅く、コンピューターがフリーズするほどでした。他のJavaアプリケーションは実行していませんでした。対照的に、私のコンピューターは最新の3Dゲームのほとんどを簡単にプレイできます。今すぐJavaの学習と改善を続けて、後でC ++を学習する必要があることが判明した場合、切り替えを行うのは難しいかもしれません。

Javaは深刻なゲーム開発に受け入れられる言語ですか?真面目な言い方をすれば、私は現代のコンピューターで大きな遅れのない高品質のグラフィックスを意味します。また、コンソール用のゲームの作成を検討したいと思います。


25
MinecraftはJavaでビルドされていませんか?または主にOpenGLですか?ああ、Javaに100%設定されていない場合はC#をチェックしてください。
アラロックス

7
Stack Overflow C ++ Chatに来てみませんか?私たちはC ++が大好きです。C++は絶対に正しく使用できると思います。その方法を知っているので、喜んで共有します。
DeadMG

12
Minecraftはjava + LWJGL + Notchのコーディングスキルであるため、パフォーマンスの面ではTERRIBLEです。
MLProgrammer-CiM

3
コーディングゲームであれ、他の何かであれ、単一の言語に縛られても、将来的には役に立ちません。C ++かPythonのようなもののどちらかを少し分岐します。時間はかかりますが、より良い開発者になります。
loganfsmyth

4
Java / C ++戦争は明るく燃え、意見を受け入れる前に特定の例を要求し、自分でさらに研究する準備ができているため、多くの誤った情報を取得することになります=)多くの言語を知っている必要があります。その場合にのみ、あらゆるタスクに適したツールを選択できるからです。近い将来、「ゲームスタイルプログラミング」を学習したい場合は、(Java)に慣れているものを使用し、後でC ++を学習します。ちなみに、後でC#でコンテンツパイプラインを実行し、Java MEでゲームを実行する場合、予測するのは困難です=)
パトリックヒューズ

回答:


54

はい、このリストで証拠を確認してください。これらは、Lightweight Java Game Library(LWJGL)を使用してJavaで作成されたいくつかのゲームです。これは低レベルのフレームワークであり、高品質のグラフィックス用のOpenGLとサウンド用のOpenALを提供します。入力APIも提供します。これらを使用すると、Javaで本格的なゲーム開発を簡単に開始できます。

現在、Javaの趣味プロジェクトとして2番目の3Dゲームを書いていますが、それが大好きです。以前は、C ++でゲームを記述していましたが、Javaに切り替えた後は戻りません。Javaで複数のオペレーティングシステムをサポートすることは非常に簡単です。たとえば、1年前にWindowsで開発した以前のJavaゲームは、すぐにLinuxで、OS Xでは1つのバグのみで動作し、それらのプラットフォームで何もコンパイルする必要はありませんでした。

一方、Javaにはいくつかの問題があります。

  1. ガベージコレクター。他の人が述べたように、非決定的メモリ管理は問題であり、それを念頭に置いてコーディングする必要があります。
  2. サードパーティのライブラリの欠如。利用可能なライブラリのほとんどはJavaをサポートしていません。一方、これらのネイティブライブラリをJavaから呼び出すオプションも常にありますが、そうするのは手間がかかります。また、人気のあるライブラリにはJavaポートまたは既製のラッパーを使用できます。たとえば、JBullet-Bullet Physics LibraryのJavaポートを使用しています。一方、Javaには巨大なクラスライブラリが組み込まれているため、ゲームに関連しないサードパーティライブラリの必要性が減ります。ライブラリーの不足は私にとっては問題ではありませんでしたが、他の人にとっても問題になると想像できます。
  3. Javaは一般的なゲームコンソールではサポートされておらず、私の知る限りJavaから簡単に切り替えることはできません。一方、人気のあるモバイルプラットフォームであるAndroidは、何らかの形式のJavaを使用します。これもオプションですが、PCとAndroidデバイスの両方で動作する同じJavaコードを除きません。
  4. より小さなコミュニティ。ほとんどのゲームプログラマはC ++を使用しており、私の経験ではJavaが嫌いです。他の人からそれほど多くの助けを得ることを期待しないでください。C ++スキルがなければ、ゲーム開発の仕事を期待しないでください。

40

あんまり。まず最初に、Javaの既存のライブラリに関しては、C ++の事実上すべてと比較してほとんどありません

第二に、言語としてのJavaは単にゲーム開発に適していません-たとえば、GPUバッファーを処理している場合、Javaは、それらが正しくロックされていることを確認するのに役立つ言語機能を提供しませんC ++が行うロック解除または破棄。さらに、パフォーマンスの問題があり、GCは非決定的であり、ゲームにとっては非常に悪いです。

実行前にネイティブコードにコンパイルされていない言語でかなりの時間を費やした非インディーゲームは見たことがないし、そうするインディーゲームもまれです。だから今の私の信念は、それは単にできないということです。

また、今すぐJavaの学習と改善を続けて、後でC ++を学習する必要があることが判明した場合、切り替えは難しくなりますか?

はい、絶対にそうなります。JavaとC ++は、表面的な構文上の類似性にもかかわらず、大きく異なります。Javaの経験は、C ++を学習する際にはほとんど何の価値もありません。

グラフィックを介したゲームプレイ実行可能な選択肢であり、テラリアやマインクラフトのようなゲームの成功でそれを見ることができます。ただし、srsグラフィックを作成する場合は、Javaで実行できません。


6
重いグラフィックス、遅延のない高速ゲームプレイを指定したため、+ 1。
ジョシュアドレイク

1
Javaの符号なしデータ型の欠如もそれに反します。はい、回避できますが、理想的ではなく、基になるデータを正しく反映していないコードを使用することになります。
マキシマスミニマス

@deadmg ロックおよびロック解除の場合、いくつかのDirectX API機能について言及していますか?&非決定論的なGCの何が悪いのか教えてください。
クアジイルファン

非決定的GCは、フレームをドロップすることに相当することがあります。これは、ワールドストップがうまく停止せず、フレームのレンダリングにかかる​​時間よりも長くロックされた場合です。実際には、メモリの使用を計画する場合、これはあまり頻繁に発生することはありません。JVMのコレクターは、低ポーズ(フレームドロップの安全な制限内)に構成できます。それでも、対処しなければならないのは楽しいことではありません。最終的に、C ++を離れたときに得た生産性のかなりの量を返さなければなりません。
マイケル

2
最初は完全に書き直す必要があります。
DeadMG 14

25

だから、私はゲーム開発に本当に真剣です、Javaはまだ実行可能な選択肢ですか?私はC ++を学ぶために何度も試みましたが、私は言語が本当に好きではありません。理由はよくわからないが、通常、学ぼうとするたびに、トピックを把握することはできない。

Javaを選択する理由がC ++を理解できないことである場合、Javaプログラムは高品質のグラフィックスに十分な速さではありません。高いレベルの言語を使用するのは、低いレベルの言語を理解できなかったからではなく、生産性を高めるためです。

特にゲームが単純な場合、Javaでゲームを作成することはまったく悪い考えではないと思いますが、松葉杖として使用している場合、すぐにJavaでパフォーマンスの問題が発生します。

つまり、要するに、Javaは真面目なゲーム開発のために真面目に受け止められます。これには、重いグラフィック、遅れのない高速ゲームプレイ、そしておそらくコンソールへの簡単な切り替えが含まれますか?

  1. Heavy Graphics:可能ですが、C ++ / GLの場合と同じことをJava / LWJGLで行う予定です:バイトをGPUバッファーに書き込むか、Minecraftのように非推奨の表示リストを使用します。メモリ管理を理解していない場合は、これも正しく行いません。

  2. 遅れのない高速ゲームプレイ:どの言語でも簡単なタスクではありません。考えずに足で撃つ可能性が高くなります。

  3. いいえ、Javaはコンソールで使用できません。


副次的な質問として、廃止されたディスプレイリストは何に置き換わりましたか?

@Suds:プログラム可能なパイプライン、私は信じています。
-DeadMG

ハ!すでにそれをカバーしました。VBO
ジミー

モバイルプラットフォームはコンソールと考えることができます。彼はおそらくビッグ3について話していたと思いますが、AndroidはJavaを使用しており、多くのゲームが作成されています。
Amplify91

1
@ Amplify91はい、いくつかのゲームはAndroid用のJavaで記述されています。しかし、ほとんどの優れたゲームと、おそらくすべてのグラフィック集約型またはマルチプラットフォームゲームは、Android NDKを使用してC ++で記述されています。
コヨーテ

15

経験豊富なプログラマーは一般に多くのプログラミング言語を知っているでしょう-プログラミング言語をよく知っていれば、追加のプログラミング言語を学ぶことはそれほど難しくありません。ただし、C ++を最初の言語にすべきではなく、おそらく2番目の言語にもすべきでないことを強くお勧めします。

これは、C ++が実行時の重要なエラーチェックを行わないことで多くの効率を得るためです。たとえば、Javaで配列の末尾から離れた要素にアクセスすると、常に例外をスローして、プログラマに何が間違っているのかを正確に伝えます。C ++では、幸運にもすぐにクラッシュする可能性がありますが、非常に頻繁に他のデータ静かに破棄し、エラーはずっと後まで表示されません

今のところJavaを使用することをお勧めします(または、必要に応じてC#に切り替えます)。これにより、C ++を使用するよりもすばやく処理でき、PCでのパフォーマンスは問題になりません。

より安全な言語でいくつかのプロジェクトを完了した後、C ++の学習を検討してください。C ++は、ほとんどのプロのゲーム開発ジョブに必要なものです。

C#/ XNAを除いて、少なくともコンソールに書いたゲームを入手するには、会社を設立し、オフィスを開設し、開発ハードウェアやその他の費用に多額の予算を用意する必要があります。


これは、C ++以外の言語でも達成感が得られるため、例外的に当てはまります。C ++は、何も感じられないために数百時間かかることがあります。最初に他の言語を学ぶことで、あなたは自分の足を濡らします。
ダーケナー

エラー処理の欠如に関するコメントは、実際にはC(および実際にはCであるいわゆるC ++コード)に関するものです。C ++には、記述したものよりもはるかに優れたエラー処理を行う標準ライブラリ(および標準テンプレートライブラリ)があります。C ++には、まともなエラー処理を提供するベンダー提供のライブラリ(MFCなど)もあります。
ジャスパー

9

免責事項:これはあなたの質問に正確には答えません。しかし、私はあなたに興味があるかもしれないいくつかの点に(簡潔に)言及しようとしました。

C ++について多くのことを見る理由は、C ++がまだ業界標準であり、コンソールなどで最も一般的な言語だからです。

Javaはあまり使用されません。MinecraftはJavaで大きくなった非常に人気のあるゲームです。しかし、グラフィック的にはそれほど素晴らしいものではありません。Spiral Knightsは悪くありません-また、Javaで作られており、重要なグラフィックがあります。

Javaが好きな場合、C#は構文が非常に似ており、C ++と相互運用できるという利点があるため、必要に応じてC ++で低レベルのものを実行できます。UnityはスクリプトにC#を使用できます。XNAは優れた選択肢です。

繰り返しますが、Javaは広く使用されていません。スタイルと構文が好きなら、C#は非常によく似た、非常に快適なコーディングエクスペリエンスであることがわかると思います。

あなたの夢が実現することを願っています、それは道に沿ってとても楽しいです:)


8
この投稿には多くの不正確さがあります。Minecraftの「悪い」グラフィックは、言語に(あまり)関係ありません。MCのパフォーマンスが悪いことは、Javaがパフォーマンスの問題が大きいためゲームの悪い言語であることに直接関連しており、LWJGLは同じ理由で大きなコーディングプロジェクトには不適切なライブラリです。しかし、最大の要因はノッチの悪いコーディングと実装でした。それは修正されています...ゆっくり。C#は、ほとんどのJavaパフォーマンスの問題を発生させることなく、管理されたメモリをすべて提供します。欠点は、C#がゲームとアプリケーションの両方でMicrosoftを中心としていることです。
MLProgrammer-CiM

2
@EfEs:私はあなたにそれを破ることを嫌いますが、マネージドメモリはゲームにとってひどいものであり、XNAでゲームをコーディングする人はC ++でコーディングする人よりもメモリの管理に多くの時間を費やさなければなりません。GCの非決定的な性質は、事実上すべてをプールし、ペストのような割り当てを避ける必要があることを意味します-言語が使用されるはずの方法ではありません。
DeadMG

この答えは、100%正確であることを意図したものではありません。私は漠然と知っている例を引用しただけです。DVまでお気軽に。
-ashes999

2
@DeadMG私はC ++が進むべき道であることを知っています。ゲームではC#がJavaよりも優れていることを説明しようとしていました。
MLProgrammer-CiM

5
長い間C#開発者であった(ゲーム開発者は考えていなかった)私は、プーリングとメモリ管理は、設計が不適切なシステムにとって大きな問題であると考えています。私が知っているC / C ++の考え方と開発方法を持つ人々は、Java / C#のような言語で使用し、それらを活用する必要のあるマネージドメモリ、設計、アーキテクチャパターンにほとんど息を吹き込みません。私が言いたいのは、C / C ++のテクニックや製品が悪いということではありませんが、構文の点でより単純な言語(JavaやC#など)を使用しても、ゲームを適切に設計するには多くの経験が必要です仕方。
イヴァイロスラヴォフ

3

これはあなたの質問に答えません。グラフィックとコンソールの問題は、あなたが非常に考慮する必要があるもののようです。また、GCはパフォーマンスに影響します。しかし、私が書いていること:

大規模で複雑なオブジェクト指向プログラムを作成する場合は、JavaでC ++よりも5倍速く作成できます。また、メンテナンスが非常に簡単になります。切り替えて(ゲーム以外のソフトウェアの場合は確かに)、生産性は急上昇しました。もう1つの優れた代替手段であるC#は、Javaよりも学習が難しいのです。知っていれば、Javaよりもさらに速くコードを書くことができます。それはあなたに多くのトリックを提供します。しかし、これらのトリックはメンテナンスを困難にする可能性があります。さらに、Sunのライブラリ独自の古いコードを支援するJavaドキュメントがあります。C#には、これに似たものは何もありません。

Javaで毛むくじゃらの大きなゲームをして、言語が完璧であることがわかりましたが、私のグラフィックは初歩的なものであり、10分の1秒がプレイヤーにとって永遠であったシューティングゲームではありませんでした。また、私はほとんどの人が新しいゲームを作成するためだけに行っていると思いますが、後で追加する予定です。


3

男を見て、「ゲーム開発者にとってJavaは実行可能か」という簡単な答えは明らかです。任意のプログラミング言語を使用してゲームを作成できます。それはあなたがするべきこと意味しません。

おそらく、C ++をオフにすること(低レベルのメモリ管理、ガベージコレクターなし、ポインターに注意を払う必要がある、配列としての構造体など)は、コンピューターのリソースを最も効率的に活用したい場合に学ぶべきことです。。コンピューターのリソースを最も効率的に利用している場合、ゲームは最適に動作します。

Javaは、実行を遅くするだけのいくつかの処理(配列の境界チェックなど)を行います。で、この最適化されたJava Perlinノイズサンプルコード、著者は、「(配列アクセスメンバアクセスより多く遅い)」コメント。この種のことは、C ++のバックグラウンドから来る直感に反するものです。しかし、Javaでは、そのようなことがあります。

私は、弾丸をかわすのをやめて、C ++を学び、それを使うと言います。


1

コンピュータサイエンスで正式な教育(学士号?)を行う余裕ができるまで、ゲームデザインを重視して、最もよく知っている言語で行う必要があります。 特に「Javaの正式なトレーニングなしでこれをやった」と言える場合は、ゲームを使用して奨学金を得ることができます。

Oracleの最新のJVMでも、人々がここで提起した懸念に対処するための多くの機能を備えています。異なるガベージコレクタを使用して、より確定的なガベージコレクタの動作を取得できます。私は、3Dライブラリーに関する広範な経験はありません-Java3Dについてはほんの少しですが、ここで誰も文句を言っているようには見えません。エスケープ分析により、ロックの省略と、非常に短命のオブジェクトのはるかに高速/無視可能な割り当てが可能になりました。

問題は、C ++のJavaを選択するかどうかにかかわらず、同時実行性を適切に使用する方法を学習し、メモリ管理を十分に理解する必要があることです。結局のところ、あなたはでできるのと同じくらい簡単に台無しにするmallocことができますnew。C ++のツールがどのようなものかはわかりませんが、Javaのプロファイリングツールはかなり使いやすく、無料で、IDEに統合されています。これらを使用して、パフォーマンスの問題を追跡し、学習することができます。


5
CSでの正式な教育は、あらゆる分野の実際のプログラミングスキルにとっては大したことではありません。私は知っているだろう、私は私の3年目です。
DeadMG

4
DeadMGには絶対に反対します。私が好きなコースを卒業して選んだので、CSは私のゲーム開発力を10%から100%に引き上げました。UI、図像などは教えませんでしたが、実際の実際のコーディングです。
ashes999

2
@ ashes999:ラッキーになった。私のコースは価値がなく、同じように感じる人が他にもたくさんいることを知っています。
-DeadMG

2
@DeadMG勉強しているときは見にくいです。数年のF / Tで働いて、他の無料のスキルを学べば、それがわかるでしょう。やった。しかし、たぶん私は多くの注意を払って、ゲーム開発の趣味にすべてを適用しようとしました。
ashes999

1
学校と教授次第だと思います。たくさんの素晴らしいプログラミングクラスがあり、たくさんのことを学びました。出席して知識を失ったと実際に感じた場所がいくつかありました。それはすべて、優秀な教授がいるかどうかにかかっています。IMO。
ネイト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.