我正在设置一个游戏循环。该循环设置为每秒更新50次。目前,应用程序唯一的操作是在响应触摸事件时绘制屏幕坐标。最初,我将绘图函数设置为仅绘制新的触摸事件。这导致文本闪烁。多个触摸事件会在不同的时间闪烁,这让我认为Canvas在幕后使用多个页面。为了解决这个问题,我列出了发生的每个触摸事件,并在每次绘制调用时重新绘制整个列表。
请纠正我如果我错了,lockCanvas()/unlockCanvasAndPost()调用实质上是一个后备缓冲区交换。阅读锁定和解锁的文档听起来好像必须在调用之间重新绘制整个场景,除非您使用lockCanvas(Rect dirty)。在这种情况下,需要重绘脏矩形区域,而外部区域则被保留。
引用:
表面内容在unlockCanvas()和lockCanvas()之间永远不会被保留,因此,必须写入表面区域内的每个像素。唯一的例外是当指定了脏矩形时,非脏像素将被保留。
我知道这听起来像是我自己回答了我的问题,但根据文档,表面在调用之间永远不会被保留。但是,这并不能解释我的第一个实现的行为,即我轻敲屏幕时文本会开始闪烁。由于我只绘制了文本一次,这意味着闪烁来自于交换到没有得到drawText()调用的“后备缓冲区”,而原始表面没有被销毁,但可能被认为是不可靠的。
所以问题是:我需要在每次绘制调用时重新绘制所有对象吗?如果是这样,我需要“清除”画布,或者至少也要重新绘制背景图像吗?
请纠正我如果我错了,lockCanvas()/unlockCanvasAndPost()调用实质上是一个后备缓冲区交换。阅读锁定和解锁的文档听起来好像必须在调用之间重新绘制整个场景,除非您使用lockCanvas(Rect dirty)。在这种情况下,需要重绘脏矩形区域,而外部区域则被保留。
引用:
表面内容在unlockCanvas()和lockCanvas()之间永远不会被保留,因此,必须写入表面区域内的每个像素。唯一的例外是当指定了脏矩形时,非脏像素将被保留。
我知道这听起来像是我自己回答了我的问题,但根据文档,表面在调用之间永远不会被保留。但是,这并不能解释我的第一个实现的行为,即我轻敲屏幕时文本会开始闪烁。由于我只绘制了文本一次,这意味着闪烁来自于交换到没有得到drawText()调用的“后备缓冲区”,而原始表面没有被销毁,但可能被认为是不可靠的。
所以问题是:我需要在每次绘制调用时重新绘制所有对象吗?如果是这样,我需要“清除”画布,或者至少也要重新绘制背景图像吗?