2017-08-17 70 views

回答

0

你会很快耗尽内存女巫这样的架构(具有巨大的帆布和观看的只是一部分)。

保留某些列表中的几何元素,包含位置/大小,然后使用“摄像机视图”矩阵来计算每个元素的实际坐标(此矩阵将允许您执行所有类型的视口操作,四处移动,缩放,旋转,甚至有些倾斜)。

有一个帆布这是唯一在屏幕上,并且只有1:1像素大小的,即作为目标的视口表面被在绘制。然后,每个形状在转换后适合该区域,以适当的比例绘制在画布上。

这样,如果你的元素使用矢量图形,将保持锋利,甚至在高缩放级别的清脆,而全帆布将已经超出了在这种情况下内存限制。

但是这样做,你可能会遇到不同类型的问题,具有性能。每次从头开始重新绘制画布以及大量元素可能需要相当长的时间。有几种技术可以改善这一点,我不相信你会有成千上万的元素,所以清除所有元素应该没问题。但是可以实现各种缓存,包括重新使用几个画布来“平铺”最终区域,以改善移动速度。

但是,首先,您可以简单地使用变换后的几何图形重新绘制画布,在变换后,Paint本身已经将区域之外的元素剪掉。你有这个基本的解决方案(而你却写的代码,这将触摸手势转化为观察矩阵的修改,而不是滚动布局)后,您可以用性能试验,也许简单的方式将您的需求已经足够了,而不任何平铺/缓存。

或许检查引擎是如何工作的3D,他们没有巨大的画布上,但他们在屏幕上绘制只可见区域,他们第一个转换的几何形状的点坐标的形式,而不是在渲染的像素。该原理也可应用于二维(同样的事情,没有六自由度旋转和线性透视)。