我正在建立一个游戏循环。循环设置为以50 FPS更新。目前,应用程序执行的唯一操作是响应触摸事件绘制屏幕坐标。最初我设置绘图功能只绘制新的触摸事件。这导致文本闪烁。多个触摸事件在不同时间闪烁,这使我认为Canvas在幕后使用多个页面。为了解决这个问题,我列出了发生的每一个触摸事件,并在每次绘制调用时重新绘制整个列表。
如果我错了请纠正我,lockCanvas()/ unlockCanvasAndPost()调用本质上是一个backbuffer交换。阅读关于锁定和解锁的文档听起来有必要在调用之间重绘整个场景,除非你使用lockCanvas(Rect dirty)。在这种情况下,需要重绘脏区域,同时保留外部区域。
在unlockCanvas()之间永远不会保留Surface的内容 和lockCanvas(),因此,Surface区域内的每个像素 必须写。这个规则的唯一例外是脏的时候 指定了矩形,在这种情况下,将使用非脏像素 保留。
我知道这听起来像我已经回答了我自己的问题,但根据文档,Surface之间永远不会保留。然而,这并没有解释我的第一次实现的行为,我会点击屏幕,文本将开始闪烁。由于我只画了一次文本,这意味着闪烁是从交换到没有得到drawText()调用的“backbuffer”,而原始的Surface没有被破坏但是可能需要考虑不可靠的。
所以,问题是:我是否需要在每次绘制调用中重绘所有对象?如果是这样,我是否需要“清除”画布,或者至少重绘背景图像?
答案 0 :(得分:0)
是的,除非您正在进行脏重绘,而是在定义要重绘的区域,否则画布上的每个点都会被破坏。