在画布上绘制性能问题

时间:2013-11-21 19:34:17

标签: canvas bitmap tizen

我有一个原生游戏,我在画布的画布上画了几个位图 问题是如果我在整个画布上绘制背景位图,它会大大减慢绘图过程。

我在我的游戏形式的onDraw方法中做到了:

result GameForm::OnDraw() {
    result r = E_SUCCESS;
    pCanvas->SetBackgroundColor(*backgroundColor);
    pCanvas->Clear(*rect);

    //this increases time of drawing from about 25ms to 50ms
    //  r = pCanvas->DrawBitmap(Rectangle(0, 0, this->GetWidth(), this->GetHeight()), *pBackgroundBitmap);

    //drawing some (up to 60-80) small bitmaps on pCanvas
    pLevel->draw(pCanvas);

    return r;
}

我使用BITMAP_PIXEL_FORMAT_ARGB8888选项解码图像。

有没有办法在不使用openG的情况下更有效地绘制背景位图?

1 个答案:

答案 0 :(得分:0)

每帧绘制背景图像效果不佳。考虑1280x1024的宽度和高度,888格式的背景位图将是1280 * 1024 * 3 = 3932160字节~3.75MB。

我会有2个画布,下面的画布会将背景绘制到一次,并且顶部的画布将被清除并重新绘制每一帧,允许背景显示未绘制的部分(透明地。 / p>

这是一个HTML5 +画布示例http://jsfiddle.net/3jWL3/

JAVASCRIPT

var bg = document.getElementById("bg");
var bgctx = bg.getContext("2d");
bgctx.fillStyle = "yellow";
bgctx.fillRect(0, 0, 300, 300);

var game = document.getElementById("game");
var ctx = game.getContext("2d");
window.setInterval(function() {
    ctx.clearRect(0, 0, 300, 300);
    ctx.fillStyle = "red";
    ctx.fillText("" + Date.now(), Math.floor(Math.random() * 200), Math.floor(Math.random() * 200));
}, 16);

HTML

<canvas id="bg" width="300" height="300"></canvas>
<canvas id="game" width="300" height="300"></canvas>

CSS

canvas {
    position:absolute;
    left:0;top:0;right:0;bottom:0;
    padding:0;margin:0;
}