私は Slick2D を使用したゲーム プログラミングを掘り下げてきましたが、長い目で見れば、LWJGL の方が役立つことがわかっているのではないかと考え始めました。一方で、Slick2D は高速でシンプルですが、2D と 3D の両方の機能を備えているという意味では、LWJGL の方が適応性が高いようです。Java の中級者で、ゲームを作りたいと思っている人にとって、すぐに LWJGL を学ぶために追加の努力をする価値はありますか?
2 に答える
両者は本当に関係がないと思います。つまり、Slick が LWGJL の上に構築されていることは知っていますが、それは私がここで得ているものではありません。
Slick は、ハードウェア グラフィックスとサウンド アクセラレーションを活用し、2D ゲームに適した一連のオブジェクトとクラス (幾何学的モデルと 3D 座標空間ではなく、スプライトとタイルマップ) を使用して 2D ゲームにその力を与えるために存在します。それがその使命であり、その問題を解決するのに優れているように構築されています. Slick が LWJGL に基づいているという事実は、LWJGL が Slick のようなものを構築できるライブラリであるという単純な問題です。Java でゲームを作ろうとする人々の歴史の中で、グラフィックスのパフォーマンスは常に、高品質のものを市場に出す上での大きな問題でした。Slick は基本的に、デスクトップ上の 2D ゲームのハードルを取り除きます (いつか Android でも可能になることを願っています)。
Slick と LWJGL の比較を考えると、これは「適切な仕事に適したツール」のようなものです。Java で 2D ゲームを作成している場合、Slick は素晴らしい方法です。実際に 3D ゲーム (またはトップダウン形式の 2D ビューを持つゲームで、シーンを実際に 3D でレンダリングする必要がある) を構築している場合は、LWJGL が最適な出発点になる可能性があります。
ただし、2D ゲームを構築していて、LWJGL で構築する価値があると考える場合、そのゲームを機能させるために構築するものの 99% は、スプライト、アニメーション、キーになります。入力、パスファインディング、サウンド。Slick はすでにこれらのものを構築しています。あなたは車輪の再発明を行うことがほぼ保証されており、あなたが善意であるとしても、何年も Slick に取り組んできた開発者と同じようにそれを行うことはできません。2D ゲームのレンダリングは解決済みの問題です。時間を無駄にしないでください。レンダリング エンジンに真剣に取り組んでいる場合を除きます(ゲーム エンジンについて話しているわけではありません) 。ゲーム プレイやメカニクスの作業に時間を費やしますが、実際のレンダリング テクノロジには時間をかけます)。フラストレーションは、解決するのが難しすぎる問題から生じるものではありません (確実に解決できます)。それは、何ヶ月も費やして構築し、完了すると、機能のサブセットが既に存在するということです。 Slick に含まれていますが、表示するゲームはありません。Slick を作った賢い人たちは、すでに Java で 2D ゲーム エンジンの要素を解決してくれています。彼らの仕事を利用して、目の前にあるものを構築しようとして何ヶ月も費やす必要はありません。
最後の類推として、90 年代初頭の PC でのゲームの大爆発は、DirectX が市場に出回ったときに実際に起こりました。確かに、Atari、Apple ][、Commodore などにまでさかのぼるビデオ ゲームがありましたが、DirectX が登場し、開発者が独自のゲームを作成することから解放されたとき、ゲームとテクノロジーは爆発的に飛躍しました。サウンドとビデオのドライバー。当時、開発者がゲームを作成する場合、これは文字どおり、ゲームを実行するサウンド カードとビデオ カードごとに個別のドライバーを作成するかライセンス供与する必要があったことです。DirectX によって、開発者は、ハードウェアが特定のバージョンに対して "DirectX と互換性がある" こと、必要なパフォーマンスを提供するのに最小限の力しかないことだけを心配する必要がなくなりました。
これがどれほど大きかったかを説明するのは難しいですが、Java で 2D ゲームを開発している場合は、Slick (または他のゲーム ツールの 1 つ) が DirectX です。
normalocity からの本当に素晴らしい回答です。Slick2D で描画シーンを本当に最適化したい場合は、Slick の標準的な描画方法より glBegin/glEnd を使用することを知っておく必要があります。
多くのスプライト (~10 000) を使用すると、この方法は非常に遅くなります。この問題を回避するには、非常に大きなスプライト シートで drawEmbedded メソッドを使用するか、LWJGL で独自のメソッドを作成します。最善の方法は、VBO レンダリングを作成することです => http://lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO )。