我正在开发一个小型库作为某些应用程序的基础.当我即将创建一个场景图(2D)时,我想知道在性能,可维护性,易用性等观点下,以下哪种方法看起来更有前途.
>我可以给每个可绘制元素一个矩阵,在那里我执行平移,旋转等等.
>我可以在画布上做所有事情而不是元素.
第一个解决方案有一个缺点:对于像圆形这样的原始元素,我无法在绘制调用中传递矩阵,我必须从矩阵中访问转换后的值,如下所示:
private float get(int index) { final float[] values = new float[9]; getValues(values); return values[index]; } public float getX() { return get(Matrix.MTRANS_X); } public float getY() { return get(Matrix.MTRANS_Y); }
因此,在每次绘制调用时,我为每个getter调用创建一个float数组(一个用于getX(),一个用于getY()).假设屏幕上有足够的元素,这可能会导致内存和性能影响.
第二种方法具有“消极”思维的缺点.如果我想在100/100点绘制一个元素,我必须将画布转换为-100 / -100,因为我会在0/0上绘制.如果我在那之后恢复画布,结果将是在想要的100/100上绘制的元素.我不确定这种消极的想法是否会对代码可维护性和理解能力产生重大影响(甚至从未考虑通过简单地忘记否定某些内容来引入错误……).
有人有提示哪种方式应该首选吗?