我是否需要每帧重绘画布上的所有对象?

时间:2012-06-07 07:26:30

标签: android canvas game-loop

我正在建立一个游戏循环。循环设置为以50 FPS更新。目前,应用程序执行的唯一操作是响应触摸事件绘制屏幕坐标。最初我设置绘图功能只绘制新的触摸事件。这导致文本闪烁。多个触摸事件在不同时间闪烁,这使我认为Canvas在幕后使用多个页面。为了解决这个问题,我列出了发生的每一个触摸事件,并在每次绘制调用时重新绘制整个列表。

如果我错了请纠正我,lockCanvas()/ unlockCanvasAndPost()调用本质上是一个backbuffer交换。阅读关于锁定和解锁的文档听起来有必要在调用之间重绘整个场景,除非你使用lockCanvas(Rect dirty)。在这种情况下,需要重绘脏区域,同时保留外部区域。

  

在unlockCanvas()之间永远不会保留Surface的内容   和lockCanvas(),因此,Surface区域内的每个像素   必须写。这个规则的唯一例外是脏的时候   指定了矩形,在这种情况下,将使用非脏像素   保留。

我知道这听起来像我已经回答了我自己的问题,但根据文档,Surface之间永远不会保留。然而,这并没有解释我的第一次实现的行为,我会点击屏幕,文本将开始闪烁。由于我只画了一次文本,这意味着闪烁是从交换到没有得到drawText()调用的“backbuffer”,而原始的Surface没有被破坏但是可能需要考虑不可靠的。

所以,问题是:我是否需要在每次绘制调用中重绘所有对象?如果是这样,我是否需要“清除”画布,或者至少重绘背景图像?

1 个答案:

答案 0 :(得分:0)

是的,除非您正在进行脏重绘,而是在定义要重绘的区域,否则画布上的每个点都会被破坏。