No XNA, as imagens são representadas através do objeto Texture2D. O XNA provê uma classe para renderização desses objetos – a classe SpriteBatch. O construtor da classe SpriteBatch: public SpriteBatch (GraphicsDevice graphicsDevice) Quando se instância um objeto SpriteBatch, ele recebe como parâmetro um graphicsDevice. Quem de fato mostra as texturas(Texture2D) na tela é o graphicsDevice. Um SpriteBatch, além de ter como função a “renderização” de várias texturas utilizando o mesmo graphicsDevice. Ele também funciona como: - Uma abstração aos métodos de renderização de um graphicsDevice;
- Um gerenciador(Built-in) de sprites, provido pelo XNA FrameWork.
Se o XNA não provesse a classe SpriteBatch, possivelmente, se você quisesse mostrar alguma textura na tela, você teria que aplicar a sua textura à alguma(s) primitiva(s) geométrica(s); o XNA, com o SpriteBatch, faz isso por você. Para renderizar essas primitivas, você utilizaria alguns destes métodos de um objeto graphicsDevice: DrawIndexedPrimitives, DrawPrimitives, DrawUserIndexedPrimitives ou DrawUserPrimitives. Além de ter que manipular a sua textura, “como se estivesse” manipulando um modelo 3D, se o SpriteBatch não existisse, você teria que, por exemplo, montar algoritmos matemáticos para obter alguns dos resultados enumerados abaixo: - redimensionar a textura;
- Numa situação aonde você tenha um grid de imagens, e você quer escolher alguma determinada região retangular e renderizar apenas essa região;
- Rotacionar a textura;
- Dentre outros resultados.
O SpriteBatch também permiti que você possa: - Abilitar o efeito de Alpha Blending;
- Tingir a sua textura com alguma cor;
- Dentre outras possibilidades.
O spriteBatch é por muitos, considerado um tanto limitado e especula-se na necessidade de mais cedo ou mais tarde, implementar seus próprios shader´s para conseguir obter funcionalidades customizadas. Mesmo assim, com ele ainda é possível construir vários jogos interessantes. Um dos principais, e também mais utilizados, membros do SpriteBatch: Informações sobre esse método e suas utilidades, você encontra no artigo do José Ferreira e André Furtado: Este método adiciona um sprite a um “lote(coleção)” de sprites do SpriteBatch, com intuito de renderizá-los. Antes de desenhar algum sprite na tela, é necessário fazer uma chamada ao método SpriteBatch.Begin; esse método prepara várias variáveis de ambiente. O padrão para o SpriteBatch é que todos os sprites são mostrados, de fato, quando o método SpriteBatch.End é chamado. Mas, esse comportamento pode ser modificado quando o SpriteSortMode é alterado. O método SpriteBatch.Begin, provê como passagem de parâmetro, vários objetos que modificam o comportamento de como a textura será mostrada na tela. |