web-dev-qa-db-ja.com

Slick2DとストレートLWJGL

私はSlick2Dを使ってゲームプログラミングを掘り下げており、長い目で見れば、LWJGLの方が役立つのではないかと考え始めました。 Slick2Dは高速でシンプルですが、2Dと3Dの両方の機能を備えているという意味で、LWJGLの方が適応性が高いようです。 Javaの中間で、ゲームを作りたいと思っている人にとって、LWJGLをすぐに学ぶことは追加の努力の価値がありますか?

31
platypirates

私は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ゲームエンジンの要素を解決しました-彼らの仕事を利用して、目の前にある何かを構築するために何ヶ月も費やさないでください君は。

最後の類推を行うと、DirectXが市場に出たときに、90年代初頭のPCでのゲームの巨大な爆発は本当に起こりました。確かに、Atari、Apple] [、Commodoreなどにまでさかのぼるビデオゲームがありましたが、DirectXのとき、ゲームとテクノロジーが爆発的に飛躍しました。開発者が乗り込んで、サウンドとビデオ用の独自のドライバーを作成する手間を省きました。文字どおり、ゲームを作成する場合、開発者はゲームを作成する場合、ゲームを実行したい各サウンドおよびビデオカード用に個別のドライバーを作成するか、ライセンスを取得しました。 DirectXは、開発者にそのことを心配するのをやめる機会を与えました。ハードウェアが特定のバージョンと「DirectX互換」であり、必要なパフォーマンスを提供するための最小限のパワフルであるということだけを心配するだけでした。

これがどれほど大きいかを説明するのは難しいですが、Java --Slick(または他のゲームツールの1つ)で2Dゲームを開発している場合はDirectXです!

76
jefflunt

正常性からの本当に良い答えです。Slick2Dで描画シーンを本当に最適化したい場合は、Slickの標準の描画方法よりもglBegin/glEndを使用することを知っておく必要があります。

スプライトがたくさんある場合(〜10000)、この方法は本当に遅いです。この問題を回避するには、非常に大きなスプライトシートでdrawEmbeddedメソッドを使用するか、LWJGLを使用して独自のメソッドを作成します。最良の方法は、VBOレンダリングを作成することです=> http://lwjgl.org/wiki/index.php?title=Using_Vertex_Buffer_Objects_(VBO )。

4
Cyril ALFARO