surfaceview,在屏幕上保持特定 canvas x 秒

surfaceview, keep specific canvas on screen for x seconds

我正在开发一款游戏,在某些时候需要 运行 x 步来更新屏幕上的某些对象。到目前为止,玩家看到的只是第 0 步和第 x 步。我如何在设定的时间内显示中间的每个步骤?

我已经尝试添加检查以确保在中间调用 onDraw() 以及睡眠,确保在完成每个步骤后调用 PostInvalidate 以希望强制调用 onDraw(),但没有任何运气。

(例如,在 step 函数中,有一个 bool "nextStep" 在函数结束时设置为 false,onDraw() 在结束时将其设置为 true。如果为 false,step 函数将等待更新绘制到屏幕上的二维对象数组,直到 "ondraw" 将 bool 设置为 true。)

这个有效

for (int i = 0; i < steps; i++) {
        // postDelayed fixes this because it tells the GPU to draw on next cycle otherwise, it has already passed the draw by now.
        postDelayed(new Runnable() {
            @Override
            public void run() {
                Canvas c = null;
                step(CellType.PLAYER);
                invalidate();

                try {
                    c = getHolder().lockCanvas();
                    synchronized (getHolder()) {
                        draw(c);
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    if (c != null) {
                        getHolder().unlockCanvasAndPost(c);
                    }
                }
            }
        }, stepDelay*i);
    }