我在我的游戏中每一帧都会画很多线条和矩形 - 这是一个复刻老式掌上电子游戏的过程。那些主要使用粗糙点阵显示屏幕,而对于文本或某些图像则使用自定义图像的游戏。
我有一个虚拟点阵屏幕,大小为20x20个“像素”,我还在屏幕上绘制了一些7段数码管和其他东西。
根据TraceView的数据,大部分时间都花费在drawLine和drawRectangle方法上,因为它们的数量太多了。我在每一帧中都会绘制点阵显示屏的每个“像素”以及7段数码管的每个部分。
我想到了一种优化方法,只重新绘制发生变化的像素/部分,因此我保存了先前的像素/部分状态,并尝试仅重新绘制已更改的像素/部分。基本上这是一种简单的失效。 我期望的行为是Canvas在最后一帧完成绘制后保持不变,我只需要重新绘制必要的内容。 但是,我的Canvas会闪烁成黑色,并且每次屏幕状态改变时,只有点阵显示屏的像素/部分会在一帧中闪烁。我确保没有清除我的画布。
我在SurfaceView内部的Canvas上进行绘制,并在更新线程中进行,就像Lunar Lander Android示例中描述的那样。在Lunar Lander示例中,他们每一帧都重新绘制所有内容。
也许我可以在第一帧中将所有内容渲染到位图上,然后在每一帧中更新该位图? 应该使用哪种技术来编写我的paint()方法?
我有一个虚拟点阵屏幕,大小为20x20个“像素”,我还在屏幕上绘制了一些7段数码管和其他东西。
根据TraceView的数据,大部分时间都花费在drawLine和drawRectangle方法上,因为它们的数量太多了。我在每一帧中都会绘制点阵显示屏的每个“像素”以及7段数码管的每个部分。
我想到了一种优化方法,只重新绘制发生变化的像素/部分,因此我保存了先前的像素/部分状态,并尝试仅重新绘制已更改的像素/部分。基本上这是一种简单的失效。 我期望的行为是Canvas在最后一帧完成绘制后保持不变,我只需要重新绘制必要的内容。 但是,我的Canvas会闪烁成黑色,并且每次屏幕状态改变时,只有点阵显示屏的像素/部分会在一帧中闪烁。我确保没有清除我的画布。
我在SurfaceView内部的Canvas上进行绘制,并在更新线程中进行,就像Lunar Lander Android示例中描述的那样。在Lunar Lander示例中,他们每一帧都重新绘制所有内容。
也许我可以在第一帧中将所有内容渲染到位图上,然后在每一帧中更新该位图? 应该使用哪种技术来编写我的paint()方法?