gpt4 book ai didi

android - 我是否需要每帧都在 Canvas 上重绘所有对象?

转载 作者:太空狗 更新时间:2023-10-29 15:17:52 25 4
gpt4 key购买 nike

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

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

The content of the Surface is never preserved between unlockCanvas() and lockCanvas(), for this reason, every pixel within the Surface area must be written. The only exception to this rule is when a dirty rectangle is specified, in which case, non-dirty pixels will be preserved.

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

那么问题来了:我是否需要在每次绘制调用时重绘所有对象?如果是这样,我是否需要“清除” Canvas ,或者至少也需要重新绘制背景图像?

最佳答案

是的,除非您在定义重绘区域的地方进行脏重绘,否则 Canvas 上的每个点都会被破坏。

关于android - 我是否需要每帧都在 Canvas 上重绘所有对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com