私は2D Androidゲームを作っていますが、現在はCanvasで描画しています。Android上でCanvasをOpenGLに移植する
多くの円ストロークを描画しようとすると、フレームレートが非常に低下します。 私はより強力なもので図面をやろうとするべきだと思った。
キャンバスベースのゲームを、たとえばOpenGL ESやその他のゲームエンジンに移植する最も簡単な方法は何ですか? ゲームを移植するゲームエンジンは?
私は2D Androidゲームを作っていますが、現在はCanvasで描画しています。Android上でCanvasをOpenGLに移植する
多くの円ストロークを描画しようとすると、フレームレートが非常に低下します。 私はより強力なもので図面をやろうとするべきだと思った。
キャンバスベースのゲームを、たとえばOpenGL ESやその他のゲームエンジンに移植する最も簡単な方法は何ですか? ゲームを移植するゲームエンジンは?
私は自分自身の2Dエンジンで同様のポート/拡張を行っている途端になりました。私は自分自身でこの正確な質問をしていました。
私はあなたのエンジンは、現時点で動作する方法は以下れると仮定します。
SurfaceView
を使用しています。lockCanvas()
が呼び出されます。drawCircle()
、drawLine()
、drawPath()
などの一部の方法(Skidライブラリの下で)を使用して、Canvas
を描画します。unlockCanvasAndPost()
を呼び出します。Thread.sleep()
を使用してしばらくお待ちください。この仮定は、その後、正しい場合:すべての
まず、あなたのフレームレートは、このように、ゲームループ内の任意のオブジェクトを作成し、例えば(低いかもしれない理由を、多くの理由がありますガベージコレクションが開始されます)。あなたはそれを測定した場合(System.nanoTime()
を使用して)、そしてそれは、その後、時間がかかりすぎるdrawCircle()
メソッドの呼び出しです:
Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
c.drawCircle(...);
あなたが描くことができます:
あなたはビットマップを作成してみて初期化中に円を描き、ゲームループ内のビットマップを描画します(drawBitmap()
メソッドあり)。これは、サークルを描画するよりもはるかに高速です。
まだ遅すぎる場合は、OpenGL ES 2.0を試してみてください。書籍OpenGL ES 2 for Android by Kevin Borthalerのようなチュートリアルに従うことをお勧めします。これは、2Dとテクスチャリングの両方の素晴らしい例を持っています。彼のテクスチャ付きのサンプルソースコードから始めて修正することをお勧めします。
OpenGL ESを使用して、点、線、および三角形以外の図形を描画することはできず、テクスチャでレンダリングすることができます(そして恐ろしいことがあります)。 これは、ここで最も簡単な方法は、サークルごとに2つの三角形を使用して四角形を作成し、円を描いて初期化したBitmap
からのテクスチャを適用することです。
これは現在の図面を「移植」する最も簡単な方法ですが、それでもかなり複雑です。最初にBitmap
ベースのアプローチを試すことをおすすめします。
ゲームエンジンに関しては、おそらくOpenGL ES自身(ゲームエンジンではなく、低レベルのGPU API)に基づいています。彼らはプロセスを簡単にするかもしれませんが、あなたのオプションはこの最後のアプローチに似ています。