1

私のゲームでは、最初の起動時にテクスチャが正しく表示されます。その後、ゲームを終了して再度起動すると、白い画面しか表示されません。一時停止または破棄時のクリーンアップなど、テクスチャの読み込みと Android アクティビティのライフサイクルに問題があると思います。面白いことに、実行すると白い画面しか表示されませんが、デバッグすると完全に表示されます。どなたかアドバイスお願いします、よろしくお願いします。

4

3 に答える 3

0

これまでの私の経験:

  • 2の累乗でテクスチャを作成し、描画するときに適切な比率にスケーリングおよびクリップするようにしてください。
  • ALPHA_8(テキストレンダリング)を実行できる場合は、RBGA_8888に固執しないでください
  • OnSurfaceDrawで呼び出される前に、OnSurfaceCreatedでできることは何でもしてください
  • GL11コンテキストキャストは避けてください。動作しないものもあります。たとえば、glColor4ubはコンパイルされますが、動作しません。
  • コンポーネントごとに有効と無効の呼び出しのバランスを取り、シーングラフに呼び出しを描画します。
  • nioバッファを事前に割り当てます
  • DrawElementsを使用しますが、1つの頂点の最も単純な形状の場合
  • できるだけ多くのデバイスでテストします。エミュレーターに甘んじてはいけません。たとえば、2の累乗以外はエミュレーターでは機能しますが、電話では機能しません。
  • その後、オンデマンド図面を使用できる場合。
  • onTouchEvent呼び出しを20ミリ秒間待機し、onDrawで通知を行うというトリックを使用して、処理する必要のあるモーションイベントの大洪水を減らします。onTouchEvenをバイパスし、より低い呼び出しを使用して、いくつかのサイクルを節約することもできます。
  • スコアやテキストまたはアニメーションを描画する場合など、できる限りテクスチャアトラスを使用します
  • テクスチャのリアルなレンダリングを切望しない限り、派手なレンダリングオプション(DITHER_TESTなど)を無効にします。
  • 2Dで描画する場合は、DEPTH_TESTを無効にします
  • テクスチャのバインドが完了したら、Bitmap.recycle()呼び出しを忘れないでください。
  • レンダリングルーチンでのオブジェクト作成の破棄(PointF Rect)を回避します。GC呼び出しは、フレームレートを遅くします。
  • テクスチャを広範囲にプリロードします。テクスチャをバインドするために最後の最後に描画するまで待たないでください。そうすると、アプリの起動時にラグが顕著になります。
于 2013-01-10T11:14:15.053 に答える
0

onPauseメソッドとonResumeメソッドを使用する必要があります。問題が解決しない場合は、さらに提案を追加します。私は数ヶ月前に同じ問題を抱えていました。

@Override
protected void onPause() {
    super.onPause();

    mGLView.onPause();
}

@Override
protected void onResume() {
    super.onResume();

    mGLView.onResume();
}

じゃあ多分:

public void onSurfaceChanged(GL10 gl, int w, int h) {
    gl.glViewport(0, 0, w, h);
}
于 2013-01-10T11:26:14.687 に答える
0

onSurfaceCreated() または別の場所でテクスチャをリロードしていますか? そのようなものを onSurfaceCreated() に入れたいと思うでしょう。

于 2013-02-22T02:16:12.317 に答える