Vincolare le proporzioni degli elementi GUI in Spritekit gioco
Mi scuso in anticipo a causa della enorme post, ma tutti coloro che mai provato a fare un qualche tipo di applicazione universale, sa che questa è roba abbastanza problematico, quindi per favore non affaticare me ...
L'obiettivo
Quello che sto cercando di realizzare (indicato sul immagine qui sopra) è quello di utilizzare @ 2x attivi sia su iPhone 5 e 6, e mantenere lo stesso aspetto di un app. E se possibile, fare tutto ciò senza calcolare manualmente le proprietà di scala e posizione dei nodi in base al dispositivo rilevato ... In breve, in che modo ottenere quell'app automaticamente vincola le proporzioni e tra gli elementi (e la scena)? Inoltre mi piacerebbe avere lo stesso aspetto di un'app su iPhone 6+ usando le risorse @ 3x, ma per semplicità mi sono concentrato solo su iPhone 5 e 6.
Quello che ho trovato sul web è che alcune persone dicendo che questo (downsampling) viene fatto automaticamente dal iOS, ad esempio, essi suggeriscono questo:
"Make @ attivi 2x le dimensioni per iPhone 6, e poi iOS farà downscaling automaticamente per iPhone 5".
Ma ovviamente non è vero quando si parla di scena di Spritekit o mi manca qualcosa.
Il problema
Anche se iPhone 6 e iPhone 5 hanno lo stesso rapporto di aspetto e lo stesso PPI, utilizzando la stessa attività non guardare la stessa rispetto alla dimensione scena (menu sguardo sprite il 1 ° e 2 ° immagine rispetto alla dimensione della scena) perché i PPI sono legati alla densità dei pixel, e iPhone 6 ha più spazio (diagonale più grande, più pollici), il che significa che ha più pixel di iPhone 5. E questo è da dove proviene il mio problema e io non so quale sarebbe un modo efficace per gestirlo.
Quello che ho fatto finora
La seconda immagine non è un problema per la GUI, ma per un gioco, nel mio caso lo è, perché voglio stesso aspetto su dispositivi diversi. Guarda solo la prima e la terza immagine.
Grazie a Skyler Lauren's suggerimento Sono riuscito ad avere lo stesso aspetto di un app in tutti iPhone 5 dispositivi sia su 7.1 o 8.1 sistemi, nonché su iPhone 6. Così ora, il problema è come adattare questo codice per funziona con iPhone 6+ utilizzando trame @ 3x e iPhone 4s. Ecco la soluzione per iPhone 5 e 6:
Vista controller.m
GameScene *scene = [GameScene sceneWithSize:CGSizeMake(375,677)];//fixed instead of view.bounds.size
scene.scaleMode = SKSceneScaleModeAspectFill;
dimensione Così la scena sempre è fissato a iPhone 6 dimensioni e taglie cambia secondo dispositivo. Sto usando il catalogo delle risorse per le immagini di avvio e non il file xib. Le immagini sono ridotte alle dimensioni consigliate: 640x960px per 4s, 640x1136px per 5, 750x1334px per 6 e 1242x2208 per il modello 6+. Le risorse sono dimensionate per iPhone 6, quindi per quel modello non esiste alcun ridimensionamento.
Relativo al modello 4s, quando sto usando questo metodo sopra descritto, ci sono due barre nere da ciascun lato ...
Finora l'ho provato solo su simulatore e dispositivo iPhone 6 (quello che vedo è simile alla prima immagine sul dispositivo o sul simulatore).
Domanda
Per ora, come ho detto tutto funziona su iPhone 4s (con due barre nere a causa dei differenti formati), 5, 6 utilizzando @ beni 2x, ma come rendere il tutto per lavorare con iPhone 6 + usando le risorse @ 3x? Se uso 375x667 dimensioni per la scena, allora tutto è posizionato correttamente e ha buone proporzioni, ma la qualità soffre (a causa di upscaling @ 2x)
Hai mai provato a ridimensionare un nodo, in base al dispositivo, quando lo aggiungi per la prima volta? Qualsiasi animazione successiva (modifiche alla trama) porterà il fattore di scala preimpostato. – sangony
Certo, e questo è quello che sto cercando di evitare se possibile, ma questa è certamente una possibilità per gestirlo. Sto solo cercando una soluzione più semplice/automatica che mi consenta di risparmiare molti calcoli/impostare manualmente le proprietà della scala in base al dispositivo, ecc. – Whirlwind
Stai ridimensionando la tua scena o la tua scena e la tua vista hanno dimensioni uguali (io no ridimensionamento). –