我正在开发一个小型库作为某些应用程序的基础。当我即将创建一个场景图(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 调用创建一个浮点数组(一个用于 getX(),一个用于 getY())。假设我在屏幕上有很多元素,这可能会导致内存和性能影响。
第二种方法有“消极”思维的缺点。如果我想在点 100/100 绘制一个元素,我必须将画布转换为 -100/-100,就像在 0/0 上绘制一样。如果我在那之后恢复画布,结果将是元素被绘制在想要的 100/100 上。我不确定这种消极的想法是否会对代码的可维护性和理解度造成严重影响(甚至从未开始考虑通过简单地忘记否定某些东西来引入错误......)。
有人有提示应该首选哪种方式?