Sto sviluppando una piccola libreria come base per alcune applicazioni. Mentre sto per creare uno scenegraph (2D) Mi chiedo quale dei seguenti approcci sembra più promettente sotto la vista delle prestazioni, manutenibilità, facile da usare, eccManipolazione della tela rispetto alla manipolazione degli elementi
- ho potuto dare ogni elemento drawable una matrice in cui Eseguo traduzione, rotazione e altro.
- Potrei fare tutto sulla tela invece degli elementi.
La prima soluzione ha un'inconvenienti: per gli elementi primitivi come cerchi, dove non posso passare una matrice nella chiamata sorteggio, devo accedere ai valori tradotti dalla matrice in questo modo:
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);
}
Così ad ogni chiamata di draw creo un array float per ogni chiamata getter (una per getX(), una per getY()). Supponendo di avere molti elementi sullo schermo, ciò potrebbe portare a un impatto sulla memoria e sulle prestazioni.
Il secondo approccio ha lo svantaggio del pensiero "negativo". Se voglio che un elemento sia disegnato al punto 100/100 devo tradurre la tela su -100/-100 come disegnerei su 0/0. Se ripristino la tela dopo, il risultato sarebbe l'elemento da disegnare sul 100/100 desiderato. Non sono sicuro che questo modo di pensare negativo possa avere un impatto pesante sulla manutenibilità del codice e sulla riduzione della comprensione (non ho mai nemmeno iniziato a pensare di introdurre bug dimenticando semplicemente di negare qualcosa ...).
Qualcuno ha una mancia che deve essere preferita?
Ho pubblicato il mio risultato di ricerca. Non potrei ottenere nulla di nuovo dalla tua risposta, ma ti inviterò per il tuo impegno. – WarrenFaith