Android Canvas在对象移动时保存以前的状态

时间:2016-05-27 17:52:40

标签: java android canvas

这是我的问题:

当渲染具有速度的对象(即它移动)时,也会绘制对象的最后一帧,这意味着我最终会将对象绘制多次,而不是一个漂亮的移动动画。运动路径。

这是我的渲染方法(在游戏循环中):

private void render() {
    //if the surface is NOT valid, exit rendering
    if (!surfaceHolder.getSurface().isValid()){
        return;
    }
    //lock the canvas
    canvas = surfaceHolder.lockCanvas();
    //draw all game objects to canvas (only 1 object atm)
    wizard.render(canvas);
    //unlock and post the canvas
    surfaceHolder.unlockCanvasAndPost(canvas);
}

并向导渲染:

public void render(Canvas canvas) {
    canvas.drawBitmap(spriteSheet, position.x, position.y, null);
}

据我所知,在表面的每个解锁和锁定之间,其内容不会被保留,这意味着每次调用渲染函数时它都会被完全重绘:

"在unlockCanvas()和lockCanvas()之间永远不会保留Surface的内容,因此,必须写入Surface区域中的每个像素。" 〜取自文件

那为什么不发生这种情况呢?为什么画布没有被重新绘制而是保留了所有向导的框架?

提前致谢! ^ _ ^

1 个答案:

答案 0 :(得分:0)

尝试添加:

public void render(Canvas canvas) {
    canvas.drawBitmap(spriteSheet, position.x, position.y, null);
    invalidate();
}

看看会发生什么。