一部のアプリケーションの基礎として小さなライブラリを開発しています。シーングラフ (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() 用に 1 つ、getY() 用に 1 つ)。画面上に多くの要素があると仮定すると、メモリとパフォーマンスに影響を与える可能性があります。
2 番目のアプローチには、「否定的な」考え方という欠点があります。要素を点 100/100 に描画する場合は、キャンバスを 0/0 に描画するように -100/-100 に変換する必要があります。その後キャンバスを元に戻すと、必要な 100/100 に要素が描画されます。この否定的な考え方がコードの保守性と理解の低下に大きな影響を与えるかどうかはわかりません (単に何かを否定するのを忘れてバグを導入することを考え始めたことさえありません...)。
誰かがどの方法を優先すべきかのヒントを持っていますか?