In seguito alla domanda sulle proporzioni , sono interessato a sapere cosa stanno usando le altre persone quando lavorano su sistemi di interfaccia utente 2D (molto probabilmente le loro soluzioni di produzione propria). In particolare, come gestite i sistemi di coordinate. Secondo me ci sono tre opzioni:
- Coordinate codificate (ad es. 0 -> 720, 0 -> 576)
- Coordinate normalizzate (0,0 -> 1,0, 0,0 -> 1,0), mappate in coordinate reali prima del rendering
- Coordinate virtuali (ad es .: 0 -> 1600, 0 -> 1000), mappate in coordinate reali prima del rendering
L'hard-coded è ovviamente utile solo se si è su una piattaforma fissa e si conoscono in anticipo le coordinate dello spazio dello schermo o se si è pronti a creare layout dello schermo per ogni possibile set di dimensioni dello schermo.
Le coordinate normalizzate sono belle, ma soffrono di ambiguità quando le proporzioni dello schermo non sono fisse (ad es. 0,75 mappe su coordinate fisiche diverse quando si esegue in widescreen rispetto a 4: 3). Inoltre, per gli autori, è davvero controintuitivo dichiarare un elemento dell'interfaccia utente (0,2 x 0,2), solo per scoprire che in realtà non è quadrato quando viene eseguito il rendering.
Le coordinate virtuali sono inequivocabili, ma soffrono degli stessi problemi delle coordinate normalizzate nella fase di rimappatura: una piccola discrepanza decimale può comportare errori off-by-one, il che significa che gli elementi dell'interfaccia utente che dovrebbero affiancare ora hanno una cucitura tra di loro.
Allo stesso modo, quando si dispone di uno schermo a risoluzione fissa, sia le coordinate normalizzate che quelle virtuali indicano che è molto difficile garantire una mappatura 1: 1 tra i pixel finemente elaborati dell'artista nell'immagine dell'interfaccia utente e i pixel sullo schermo, il che significa che si corre il rischio di cattivi artefatti di ridimensionamento (supponendo che tu stia eseguendo il rendering come quad strutturati sullo schermo).
Abbiamo scelto l'approccio coordinato virtuale, in particolare per evitare ambiguità sulle proporzioni. Quindi, quando si esegue il rendering su uno schermo 16:10, lo spazio dell'interfaccia utente è (0,0) -> (1600,1000), ma quando si esegue il rendering su 4: 3, lo spazio utilizzabile dell'interfaccia utente è effettivamente (133,0) -> (1467 , 0).
Esistono soluzioni migliori di cui non sono a conoscenza? Esistono buone strategie per ridurre al minimo i problemi di questi 3 approcci?