渲染大量位图时出现奇怪的瑕疵

时间:2011-07-01 13:40:34

标签: android graphics surfaceview

我正在编写一个简单的2D游戏引擎,并通过调用Canvas.drawBitmap(所有相同的源位图,但通常不使用1:1源到目标缩放)将各种对象渲染到锁定的SurfaceVew。

所有内容似乎都按预期工作,直到drawBitmap每帧都有很多调用。当发生这种情况时,我偶尔会看到一个失速(100mS左右)伴随着一种效果,看起来好像几帧渲染一起发生,即一些物体将在两个屏幕位置被绘制两次或一对物体以相同的速度移动似乎会暂时变得更近或更远。

应用程序的结构如下(为了举例简化);

initialiseGameObjects();

while(quit==false)
{
 processGameLogic(); // update object positions
 Canvas c = surface_holder.lockCanvas();
 if (c != null) {
  drawGameObjects(c); // draw all objects
  surface_holder.unlockCanvasAndPost(c);
 }
}

据我所知,Canvas是一个绘制请求的持有者,它会在发布Post时执行。据推测,它可以容纳的请求数量是有限的,我想知道我是否超过了这个限制(我根据屏幕上的内容在任何时候绘制了一百个小位图)并且无意中激怒了一些虽然我没有设法找到任何文件证实或反驳这一点,但是在某种程度上,这种冲洗和挫败了双重缓冲。

有没有人知道可能会发生什么?

此致 史蒂夫

1 个答案:

答案 0 :(得分:0)

您需要同步调用画布绘图。查看游戏驾驶线程的示例:OnDraw() is not fired, nothing is drawn in surfaceView - Android

编辑: 但是我认为它可能与这个问题有关: Android SurfaceView/Canvas flickering after trying to clear it