Hoje finalmente incluí as classes que fazem a interface com a parte gráfica, no projeto Alegria. Já é possível criar uma janela, definir seu sistema de coordenadas e viewport.
Estou ainda trabalhando com as classes de base do projeto. São um conjunto de interfaces que permitem que desenvolvedores implementem para suportar diferentes tecnologias de Entrada, Vídeo e Áudio.
Ou seja, embora inicialmente estejamos desenvolvendo uma implementação para isso (um driver) para LWJGL, nada nos impedirá de portar a API para JOGL, Java2D ou Android no futuro.
Se você não tem experiência com computação gráfica, não deve ter captado ainda o que eu quero dizer com “definir seu sistema de coordenadas e viewport”. Bem, o screenshot abaixo explica em poucas palavras:
Essa janela foi desenhada usando diretamente os drivers do projeto. Trata-se de um “jogo” de Arkanoid.
Não vale a pena postar os códigos aqui porque eles não são exatamente fáceis, afinal, estamos falando de classes de baixo nível, que a princípio não deveriam sequer ser usadas diretamente para fazer jogos. Classes melhores serão criadas para o desenvolvedor Indie.
Mas vocês já podem ver um recurso interessante. As classes do jogo Arkanoid foram feitas para uma resolução de 800×600. Porém, abri a janela de jogo em 1024×768. E dentro dela, disse que a área deveria ser de 16:9, ou seja, 1024×576.
Nenhuma alteração foi feita em nenhuma classe do jogo, elas continuam desenhando para 800×600. Porém, o jogo foi automaticamente ajustado.
A ideia é que no futuro, o desenvolvedor possa escolher entre:
- Esticar sua área de desenho junto com a tela (é o que a maioria das APIs 2D fazem hoje em dia, se a tela cresce, o sistema de coordenadas cresce junto).
- Esticar seu jogo, caso a resolução da tela seja maior ou menor que a dele;
- Manter ou não a proporção do jogo, caso a proporção seja diferente. O Alegria incluiria automaticamente as faixas pretas na lateral da tela e trataria o redimensionamento. Se ele não quiser manter a proporção, o Alegria poderá esticar ou achatar a tela;
Tudo isso com um comandinho simples, no setup do jogo ou da fase. Interessante, não?