Quais são as diferenças entre Texture, TextureRegion, TextureAtlas, Sprite e Image na libgdx?

12

Eu procurei por tutoriais. Eu já vi pessoas usando as classes acima para carregar imagens.

Como de acordo com meu entendimento, todas as classes podem ler em uma não potência de duas imagens, TextureRegion / TextureAtlas geralmente são usados ​​para carregar planilhas de sprites, nas quais a planilha contém várias imagens. Enquanto para Textura / Sprite / Imagem, eles são usados ​​para carregar uma folha de sprite com uma única imagem.

No entanto, não tenho tanta certeza de qual situação devo usar Texture / Sprite / Image e de que situação devo usar TextureRegion / TextureAtals.

Corrija-me se estiver errado, pois estou um pouco confuso com as terminologias na API depois de examinar vários tutoriais.

user15783
fonte

Respostas:

18

Primeiro, Texture vs TextureRegion: Quando você faz algo como Textura t = nova Textura (caminho), você está carregando isso na GPU. Além disso, você deve carregar energia de 2 texturas. Você pode trabalhar com outras resoluções (Texture.setEnforcePotImages = false), mas é recomendável usar o pow de 2.

Agora, o TextureRegion, pega um "pedaço" de um Texture, não importa sua dimensão. A vantagem de ter uma textura e várias regiões de textura dessa textura é que você NÃO carrega todas as regiões na GPU.

Como você pode estar pensando, quando você deseja desenhar com o SpriteBatch, é muito mais eficiente usar o TextureRegion em vez de várias Texturas, desculpe, meu inglês não é bom o suficiente. Aqui está uma boa explicação: Textures TextureRegion & SpriteBatch


Agora, você deseja usar o TextureRegion e uma única imagem com resolução de 2 com todas as planilhas e imagens. Você precisa criar TextureRegions com todas as coordenadas e dimensões? Você precisa abrir a tinta para contar pixels? Nããão, você não. Você pode usar algo como TexturePacker . Ele irá empacotar todas as texturas em uma imagem E criará um arquivo .pack com as dimensões e coordenadas de todas elas.

TexturePacker

O resultado será algo como isto:

Pacote

Em vez de criar uma Textura, crie um TextureAtlas, como este:

Criar TextureAtlas

Agora, criar suas TextureRegions seria tão simples quanto:

findRegion

(Observe que o nome da região é o nome da imagem original sem a extensão).


O Sprite contém as informações de geometria, cor e textura para desenhar sprites 2D usando o Lote. Isso significa que você pode girá-los e mover-se facilmente. Eu criei minha própria classe Entity e não preciso da classe Sprite. Você provavelmente faria o mesmo. Não acho essa classe realmente útil.


A classe de imagem é herdada do Actor. Isso significa que você pode adicioná-lo a um estágio. Faz parte do pacote Scene2D. Se você é novo no libgdx e não conhece este pacote, essas informações são suficientes para você sobre esta classe. É um tópico realmente interessante, mas não para responder nesta pergunta.

Espero que ajude :)

Kirchhoff
fonte
Obrigado! Isso está mais claro agora. :) Então, e o desempenho de criar TextureRegion a partir de Texture e criar TextureRegion a partir de TextureAtlas?
precisa saber é o seguinte
4
@ user15783 Faça como uma nova pergunta.
David J. Liszewski
Muitas informações são boas, mas essa parte é imprecisa / enganosa: "você NÃO está carregando todas as regiões na GPU" De fato, você está carregando todas as regiões na GPU. É possível que vários TextureRegions possam referenciar partes distintas (ou sobrepostas) de uma textura, enquanto Texturesempre se referem à imagem inteira. Como mudar texturas é caro, isso é bom. Sua descrição faz parecer que TextureRegiontrata de texturas esparsas (à la. GL_ARB_sparse_texture), Mas libGDX e a maior parte do hardware em que é executado não suportam essa extensão.
bcrist
Além disso, prefira os blocos de código de remarcação da SE em relação às capturas de tela do código. Dessa forma, é fácil copiar e colar coisas, se as pessoas quiserem. Basta iniciar cada linha do bloco de código com quatro espaços. Os intervalos de código em linha podem ser criados circundando o texto com o caractere sotaque grave (backtick): `
bcrist