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);
}
我正在开发一款游戏,在某些时候需要 运行 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);
}