2017-12-22 17 views
0

私は2D Androidゲームを作っていますが、現在はCanvasで描画しています。Android上でCanvasをOpenGLに移植する

多くの円ストロークを描画しようとすると、フレームレートが非常に低下します。 私はより強力なもので図面をやろうとするべきだと思った。

キャンバスベースのゲームを、たとえばOpenGL ESやその他のゲームエンジンに移植する最も簡単な方法は何ですか? ゲームを移植するゲームエンジンは?

答えて

1

私は自分自身の2Dエンジンで同様のポート/拡張を行っている途端になりました。私は自分自身でこの正確な質問をしていました。

私はあなたのエンジンは、現時点で動作する方法は以下れると仮定します。

  1. それはSurfaceViewを使用しています。
  2. ゲームループ(別スレッド)で、lockCanvas()が呼び出されます。
  3. 次に、drawCircle()drawLine()drawPath()などの一部の方法(Skidライブラリの下で)を使用して、Canvasを描画します。
  4. 次に、unlockCanvasAndPost()を呼び出します。
  5. その後、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)に基づいています。彼らはプロセスを簡単にするかもしれませんが、あなたのオプションはこの最後のアプローチに似ています。

関連する問題