0

私は Android と Java の初心者で、初めてのゲームに取り組んでいます。

ゲームは約 0.5 秒間、6 ~ 8 秒ごとに一時的に停止するようです。私はタイミングがすべてであるプラットフォーム ゲームに取り組んでいるので、グリッチはゲームをプレイできなくします :(

これはガベージ コレクションまたはバックグラウンド タスクの既知の問題ですか? セーフモードで起動して別の電話を使用しようとしましたが、同じことをします。

スプライトのロード:

public void load() {
    mysprite = new Sprite(this);
    mysprite_image = new Texture(this);
    if (!mysprite_image.loadFromAsset("mysprite_sprite_sheet.png")) {
        fatalError("Error loading sprite_sheet");
    }
    mysprite.setTexture(mysprite_image);
}

テスト プログラムのメイン ループは次のようにします。

public void draw() {
    canvas = getCanvas();

    canvas.drawColor(Color.BLACK);

    for (int i=0; i<20; i++) {
        if (x[i] + vx[i] <= 0 || x[i] + vx[i] + 60 >= screenWidth) vx[i] *= -1;
        if (y[i] + vy[i] <= 0 || y[i] + vy[i] + 60 >= screenHeight) vy[i] *= -1;
        x[i] += vx[i];
        y[i] += vy[i];

        mysprite.position = new Point(x[i], y[i]);
        drawSheetFrame(mysprite, 20, 29, 1, myspriteFrame, 4);
    }
}

draw() は、キャンバスのロックとロック解除の間に呼び出されます。

4

1 に答える 1

0

onDraw() メソッドで新しいオブジェクトを実行するのは悪い動作であることは既にご存じのとおりです。このコードでは、ループ内で新しいオブジェクトを呼び出すことさえあります。そのため、GC は時々あなたを遅くします。

これを回避するには、onDraw() メソッドの外側に「ポイント ポーリング」を作成し、必要な限りインスタンスを作成/キャッシュします。

于 2015-01-09T06:22:47.503 に答える