如何预先渲染瓷砖地图以便以后重新绘制?

时间:2014-01-24 10:03:47

标签: java android buffer android-canvas tile

我正在编写Android应用程序。我正在使用Canvas,我正在使用for循环绘制Tilemap并逐个绘制每个tile。

我希望通过渲染此tilemap(前景和背景个体)一次并保存它来提高性能,这样我就可以绘制整个地图而不会循环抛出每个单独的图块。

我的图形类看起来像这样:

public class AGraphics implements Graphics {
    Bitmap frameBuffer;
    Canvas canvas;
    Paint paint;
    ...

    public AGraphics(.., Bitmap frameBuffer) {
        this.frameBuffer = frameBuffer;
        this.canvas = new Canvas(frameBuffer);
        this.paint = new Paint();

    }

    ...
    public void drawPixmap(...){
        canvas.drawBitmap(((AndroidPixmap) pixmap).bitmap, ... );
    }

    ...

}

My World Class调用绘制Pixmap函数绘制每个图块:

public class World {
    ...
    public void drawForeground (float posX, float posY){
        // get Graphics ...
        for (int y = 0; y < map.height; y++) {
            for (int x = 0; x <map.width; x ++) {
                // calculate Positions
                g.draw(tileset, (int)posX, (int)posY, srcX, srcY, tilesize, tilesize);
            }
        }
    }
    ...
}

现在我正在寻找一种方法来保存Canvas并在每个GameLoop重绘不同位置以提高性能。

任何想法或最佳做法?如果您需要更多信息,请询问!

由于

1 个答案:

答案 0 :(得分:0)

使用Bitmap.createBitmap创建位图(一个或多个您需要的位图) 使用Canvas canvas = new Canvas(bitmap)在该位图上创建画布 画入画布

onDraw中的

,使用canvas.drawBitmap

将准备好的位图绘制到输出画布中