Batching SpriteSe nos tentamos usarmos o debugTexture do tutorial texturas para processar todos os nossos sprites e tiles, as chances de que haja problemas de desempenho sao grandes. Isto e porque estamos apenas colocando um sprite em um momento para a GPU. O que nos precisamos e de "lote" sprites para a melhoria do desempenho, por isso usamos um SpriteBatch.IntroComo discutido no tutorial texturas, um sprite e nada mais do que um conjunto de vertices que compoem uma forma retangular. Cada vertice contem um certo numero de atributos que a definem, tais como:Posicao (x, y) - onde o vertice encontra-se na telaTexCoord (s, t) - o que a regiao da nossa textura deseja processarCor (r, g, b, a) - o vertice de cor, utilizado para especificar tingimento ou transparenciaDoseadores mais sprites sao bastante simples de usar, e pode ser parecido com isso no seu jogo://called on game creationpublic void create() { //create a single batcher we will use throughout our application spriteBatch = new SpriteBatch();}//called on frame renderpublic void render() { //prepare the batch for rendering spriteBatch.begin(); //draw all of our sprites spriteBatch.draw(mySprite1, x, y); spriteBatch.draw(mySprite2, x, y); ... //end the batch, flushing the data to GPU spriteBatch.end();}//called when the display is resizedpublic void resize(int width, int height) { //notify the sprite batcher whenever the screen changes spriteBatch.resize(width, height);}Primeiro, begin() o batch, nos simplesmente dizemos que ele esta em "modo de desenho" e chamamos o use() em nosso programa de shader. Entao, chamando spriteBatch.Draw (...) colocamos as informacoes da vertice do sprite (posicao, texcoord, cor) em uma pilha muito grande. Os vertices nao sao passados para a GPU ate que uma das seguintes situacoes ocorra:O batch e forcado a render com o end () ou em outra ligacao que libera o batch, como flush ()O usuario tenta desenhar um sprite que usa uma textura diferente do que o ultimo. O batch tem de ser limpado e novamente texturizar antes de podermos continuarChegamos a capacidade de nossa pilha, por isso precisamos liberar para comecar tudo de novoEsta e a ideia basica por tras de um doseador sprite. Como voce pode ver, usando muitas texturas vai levar a muitas chamadas (como o batch tera de lavar para cada nova textura). E por isso que uma textura atlas (folha de sprite AKA) e sempre recomendado, que nos permite prestar muitos sprites em uma chamada de desenho unico.A API LWJGL-basico inclui uma implementacao SpriteBatch minima para se usarTextureRegionComo discutido, para o melhor desempenho, deve-se usar um atlas de texturas e desenhar as regioes dele (AKA sub-imagens) para colocar as sprites em nosso jogo. Para isso temos uma classe TextureRegion. Ela nos permite especificar em pixels a posicao do eixo (x, y) e seu tamanho (altura, largura) da nossa imagem Vamos dar um exemplo, onde queremos tornar nossa Sprite um destaque:Imagem da SpritePodemos ter uma TextureRegion da Sprite com o seguinte://specify x, y, width, height of tileregion = new TextureRegion(64, 64, 64, 64);Como voce pode ver, o TextureRegion nos permite obter sub-imagens sem se preocupar com o calculo das coordenadas da textura. Podemos, entao, desenhar nossa sprite