Opracowuję małą bibliotekę jako podstawę do niektórych zastosowań. Jak mam zamiar stworzyć scenegraph (2D) Zastanawiam się, które z następujących podejść wygląda bardziej obiecująco pod widzenia wydajności, konserwacji, łatwe w użyciu itdManipulacja płótnem a manipulowanie elementami
- mogę dać każdy element rozciągliwej matrycę gdzie Wykonuję tłumaczenia, rotację i więcej.
- Mogłem zrobić wszystko na płótnie zamiast na elementach.
Pierwsze rozwiązanie posiada wady: Do pierwotnych elementów, takich jak koła, w którym nie mogą przenikać macierz na wywołanie rozciągania musi uzyskać dostęp przetłumaczone wartości od matrycy, jak to:
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);
}
Tak więc przy każdym wywołaniu remisu tworzę tablicę float dla każdego wywołania gettera (jeden dla getX(), jeden dla getY()). Zakładając, że mam mnóstwo elementów na ekranie, może to doprowadzić do zwiększenia pamięci i wydajności.
Drugie podejście ma wadę myślenia "negatywnego". Jeśli chcę, aby element został narysowany w punkcie 100/100, muszę przetłumaczyć płótno na -100/-100, tak jak rysowałem na 0/0. Jeśli później przywrócę płótno, wynikiem będzie element, który zostanie narysowany na pożądanym 100/100. Nie jestem pewien, czy to negatywne myślenie spowodowałoby duży wpływ na łatwość obsługi kodu i zmniejszenie zrozumienia (nigdy nawet nie zaczęto myśleć o wprowadzaniu błędów po prostu zapominając o negowaniu czegoś ...).
Czy ktoś ma napiwek, który powinien być preferowany?
Opublikowałem wyniki moich badań. Naprawdę nie mogłem uzyskać niczego nowego z twojej odpowiedzi, ale głosowałem za twój wysiłek. – WarrenFaith