1

何度か同じような質問をしましたが、まだ問題が解決していないので、別の方法でやってみて、誰かが私を助けてくれるかどうかを確認したいと思いました。

私はAndroid用のゲームを書いています。これは、この大規模/複雑なプログラムでの私の最初の試みです。ゲームは2Dアクション/パズルゲームであり、描画にはOpenGLESではなくCanvasを使用しています。

pngs / bmps / jpgsを描画しようとした場合を除いて、すべてが順調に進んでいます。自分でインポートした画像はすべて問題ありません。組み込みのAndroidキャンバスdrawShapeメソッド(Alphaコンテンツを含む多くのペイントを含む)を使用して、牛が家に帰るまでシェイプとアニメーションを描画し、60 fps以上を維持できますが、自分の画像(たとえば、60kb)を追加しようとするとすぐにPhotoshopから保存されたpng)パフォーマンスに大きな打撃を与えました。画面上のpngのサイズが大きいほど、ヒットが大きくなります(これは理にかなっています)。

ここで何か間違ったことをしているのかどうかを理解するのに役立つ簡単な質問があります。

Canvas drawメソッドを使用して画面に赤い長方形を描画する場合、パフォーマンスを低下させることなく、代わりに同じ寸法の赤い長方形をインポートして表示できると期待できますか?私はこの問題について多くの調査を行いましたが、Android(またはNexus 7)が私の画像でこれほど苦労する理由はまだはっきりしていません。

Canvasは問題ですか?LibdgxまたはAndEngineに移植する必要がありますか(それは私が思うプロセスになります...)?

それが役立つ場合、これは私が私の資産をロードする方法です:

@Override
public Image newImage(String fileName, ImageFormat format) {
    Config config = null;
    if (format == ImageFormat.RGB565)
        config = Config.RGB_565;
    else if (format == ImageFormat.ARGB4444)
        config = Config.ARGB_4444;
    else
        config = Config.ARGB_8888;

    Options options = new Options();
    options.inPreferredConfig = config;     

    InputStream in = null;
    Bitmap bitmap = null;

    try {
        in = assets.open(fileName);
        bitmap = BitmapFactory.decodeStream(in, null, options);
        if (bitmap == null)
            throw new RuntimeException("Couldn't load bitmap from asset '"
                    + fileName + "'");
    } catch (IOException e) {
        throw new RuntimeException("Couldn't load bitmap from asset '"
                + fileName + "'");
    } finally {
        if (in != null) {
            try {
                in.close();
            } catch (IOException e) {
            }
        }
    }   

    if (bitmap.getConfig() == Config.RGB_565)
        format = ImageFormat.RGB565;
    else if (bitmap.getConfig() == Config.ARGB_4444)
        format = ImageFormat.ARGB4444;
    else
        format = ImageFormat.ARGB8888;

    return new AndroidImage(bitmap, format);
}
4

1 に答える 1

-1

Canvas は GLSurfaceView よりも低速ですが、Nexus 7 では 1 つの画面で 300 ビットマップを問題なく処理できます。

onDraw でパフォーマンスの問題を検索します。リアルタイム ゲーム デザインのヒントとコツについては、こちらをご覧ください: http://www.google.com/events/io/2010/sessions/writing-real-time-games-android.html

于 2013-03-24T17:39:23.197 に答える