android 程序 freezes/glitches 每 6-8 秒半秒

android program freezes/glitches for half second every 6-8 seconds

我是 Android 和 Java 的新手,我正在制作我的第一款游戏。

游戏似乎每隔6-8秒就会暂时停止大约半秒。我正在开发一个时间就是一切的平台游戏,所以小故障会让游戏无法玩 :(

这是垃圾回收或某些后台任务的已知问题吗?我试过启动到安全模式并使用不同的 phone 但做同样的事情。

正在加载精灵:

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() 在锁定和解锁 canvas 之间被调用。

正如您已经知道的那样,在 onDraw() 方法中创建新对象是一种不良行为,并且在这段代码中您甚至在循环中调用新对象!所以GC时不时会把你拖慢。

为避免这种情况,您可以在 onDraw() 方法之外创建一个 "point poll",并根据需要创建 create/cache 个实例。