2016-04-18 23 views
6

Sono uno sviluppatore Android, costruendo il mio primo gioco con LibGDX. Dopo aver letto A LOT, c'è ancora una cosa che non capisco.Usa Libgdx e TexturePacker con immagini xxxdpi distorti

Mi rendo conto che dovrei avere un set di immagini, per la massima risoluzione 2560x1440 (per impedire brutto ridimensionamento delle immagini non vettoriali).

sto usando TexturePacker mettere in valigia le mie immagini e anche utilizzando lineare lineare per ottenere la massima qualità:

TexturePacker.Settings settings = new TexturePacker.Settings(); 
settings.filterMin = Texture.TextureFilter.Linear; 
settings.filterMag = Texture.TextureFilter.Linear; 
settings.maxWidth = 4096; 
settings.maxHeight = 2048; 
TexturePacker.process(settings, inputDir, outputDir, packFileName); 

ho impostato la mia macchina fotografica, come raccomandato in diversi SO di, per metri fissi e di evitare tutte le Roba PPM. From Screen's C'TOR:

mCamera = new OrthographicCamera(); 
mCamera.viewportWidth = 25.6f; ; // 2560/100 
mCamera.viewportHeight = 14.4f ; // 1440/100 
mCamera.position.set(mCamera.viewportWidth/2, mCamera.viewportHeight/2, 0f); 
mCamera.update(); 

Come potete vedere ho scelto di lavorare con 1 metro = 100 pixel.

Ora, questo significa che dovrei disegnare i miei sprite con una dimensione 1/100, che sto facendo qui:

TextureAtlas atlas = new TextureAtlas(Gdx.files.internal("images/pack.atlas")); 
mImage = atlas.createSprite("image")); 
mImage.setSize(mImage.getWidth()/100 , mImage.getHeight()/100); 

Questo funziona e le immagini vengono visualizzate come previsto. MA, sono distorti come l'inferno! un'immagine perfettamente rotonda sembra pixelata sui bordi e non rotonda.

Quindi, le mie domande sono:

  1. È questo il miglior prassi o dovrei lavorare in modo diverso?
  2. Sono corretto avendo solo le immagini di più alta qualità?
  3. La distorsione significa che il mio codice sta davvero ridimensionando lo sprite e in qualche modo libgdx lo ha ridimensionato di nuovo e danneggiato la qualità?

Grazie!

EDIT
sarò adattarsi @ risposte di Tenfour04 a (1) e (2).
Per quanto riguarda la (3), il problema è con Genymotion :(, la sua pixelating la partita. Ho prova su dispositivi reali con diverse risoluzioni e sembra perfetto.

risposta

1
  1. Hai un errore nella creazione di la tua fotocamera: presumi che lo schermo abbia sempre le stesse proporzioni, ma in realtà cambierà: è meglio scegliere un'altezza o una larghezza costante (scegliere in base al tipo di gioco che stai realizzando) e regolare la dimensione opposta in base il rapporto di aspetto della schermata corrente. Ad esempio:

    mCamera.viewportHeight = 25.6f; //game screen always 25.6 meters tall

    mCamera.viewportWidth = 25.6f/(float)Gdx.graphics.getHeight() * (float)Gdx.graphics.getWidth();

  2. "Avrei dovuto una serie di immagini per la massima risoluzione" Questo non è necessariamente vero. Se lo fai, dovrai caricare immagini ad altissima risoluzione su dispositivi che non possono trarne vantaggio. Ciò userà molta memoria e gonfierà i tempi di caricamento. Potrebbe andare bene durante lo sviluppo, ma lungo la strada probabilmente vorrai avere due o tre versioni di risoluzione più piccole che puoi caricare in modo selettivo.

    Per questo motivo, evito anche di codificare hard-100 ovunque nel codice. Crea pixelsPerMeter una variabile che viene impostata una volta all'avvio del gioco. Per ora può essere solo 100, ma se decidi di fare un po 'di arte di risoluzione più piccola in un secondo momento, puoi regolarlo di conseguenza, senza dover trovare tutte le occorrenze di 100 nel tuo codice.

  3. Il filtro minimo deve essere MipMapLinearLinear o MipMapLinearNearest. Altrimenti, le prestazioni risentiranno quando gli sprites saranno disegnati più piccoli della loro risoluzione nativa e potrebbero apparire distorti come descritto. Puoi cercare la mappatura mip per capire perché questo è il caso.

+0

Ciao grazie per la risposta dettagliata. (1) mi sono familiarizzato con questo e lo realizzerò ovviamente grazie. (2) suono intelligente e facile da fare con TexturePacker come mai non vedo alcun tutorial che menzioni questo metodo di lavoro? (3) Ho anche provato MipMapLinearLinear e altre opzioni ma lo sprite è ancora distorto. Quindi, da quello che stai dicendo potrei avere un altro problema? – Shirane85

+0

Non so perché non è in molti tutorial. Il supporto è lì in TexturePacker. Magari pubblica una foto del tuo sprite distorto. Non sono sicuro che altro causerebbe ciò che hai descritto. – Tenfour04

Problemi correlati