我有一个原生游戏,我在画布的画布上画了几个位图
问题是如果我在整个画布上绘制背景位图,它会大大减慢绘图过程。
我在我的游戏形式的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的情况下更有效地绘制背景位图?
答案 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;
}