Quali sono le differenze tra Texture, TextureRegion, TextureAtlas, Sprite e Image in libgdx?


12

Ho cercato tutorial. Ho visto persone che usano le classi sopra per caricare immagini.

Secondo la mia comprensione, tutte le classi possono leggere in una non potenza di due immagini, TextureRegion / TextureAtlas sono solitamente utilizzate per caricare il foglio sprite, in cui il foglio contiene più immagini. Mentre per Texture / Sprite / Immagine, vengono utilizzati per caricare un foglio sprite con una singola immagine.

Tuttavia, non sono così sicuro in quale situazione dovrei usare Texture / Sprite / Image e in quale situazione dovrei usare TextureRegion / TextureAtals.

Per favore, correggimi se sbaglio, poiché sono un po 'confuso dalle terminologie nell'API dopo aver visto vari tutorial.

Risposte:


18

Innanzitutto, Texture vs TextureRegion: quando fai qualcosa come Texture t = new Texture (percorso), lo stai caricando nella GPU. Inoltre, dovresti caricare la potenza di 2 trame. Potresti lavorare con altre risoluzioni (Texture.setEnforcePotImages = false), ma è incoraggiato a usare pow di 2.

Ora, TextureRegion, prende un "pezzo" da una Texture, indipendentemente dalla sua dimensione. Il vantaggio di avere una Texture e una TextureRegion multipla di quella Texture è che NON stai caricando tutte le regioni nella GPU.

Come potresti pensare, quando vuoi disegnare con SpriteBatch, è molto più efficiente usare TextureRegion invece di più trame, mi dispiace che il mio inglese non sia abbastanza buono. Ecco una buona spiegazione: Textures TextureRegion & SpriteBatch


Ora, vuoi usare TextureRegion e una singola immagine in potenza di 2 risoluzioni con tutti gli spritesheets e le immagini. Devi creare TextureRegions con tutte le coordinate e le dimensioni? Devi aprire la vernice per contare i pixel? Noooo, non lo fai. Puoi usare qualcosa come TexturePacker . Comprimerà ogni trama in un'unica immagine E creerà un file .pack con dimensioni e coordinate di tutte.

TexturePacker

Il risultato sarà qualcosa del genere:

pacco

Invece di creare una Texture, crea una TextureAtlas, in questo modo:

Crea TextureAtlas

Ora, creare i tuoi TextureRegions sarebbe semplice come:

findRegion

(Si noti che il nome della regione è il nome dell'immagine originale senza l'estensione).


Sprite contiene le informazioni su geometria, colore e trama per disegnare sprite 2D usando Batch. Questo significa che puoi ruotarli e spostarli facilmente. Ho creato la mia classe Entity e non ho bisogno della classe Sprite. Probabilmente faresti lo stesso. Non trovo questa lezione davvero utile.


La classe di immagini eredita da Actor. Questo significa che puoi aggiungerlo a uno stage. Fa parte del pacchetto Scene2D. Se non hai familiarità con libgdx e non conosci questo pacchetto, queste sono informazioni sufficienti per te su questa classe. È un argomento davvero interessante, ma non rispondere a questa domanda.

Spero che sia d'aiuto :)


Grazie! Adesso è più chiaro. :) E le prestazioni della creazione di TextureRegion da Texture e della creazione di TextureRegion da TextureAtlas?
user15783

4
@ user15783 Poni come nuova domanda.
David J. Liszewski,

Molte buone informazioni, ma questa parte è inaccurata / fuorviante: "NON stai caricando tutte le regioni nella GPU" In effetti, stai caricando tutte le regioni nella GPU. È solo che più TextureRegions possono fare riferimento a parti distinte (o sovrapposte) di una trama, mentre Texturesi riferisce sempre all'intera immagine. Dato che cambiare trama è costoso, questo è buono. La tua descrizione sembra avere a che TextureRegionfare con trame sparse (a la. GL_ARB_sparse_texture) Ma libGDX e la maggior parte dell'hardware su cui gira non supporta quell'estensione.
scrive il

Inoltre, preferisci i blocchi di codice markdown di SE rispetto agli screenshot del codice. In questo modo è facile copiare e incollare le cose se la gente lo desidera. Basta avviare ogni riga del blocco di codice con quattro spazi. Gli span di codice in linea possono essere creati circondando il testo con il carattere accento grave (backtick): `
bcrist
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.