Vamos dar continuidade nesse post aos assuntos referentes à engine. Para recaptular, estou descrevendo as principais funcionalidades implementadas para a construção do jogo, levando em conta todo o conhecimento adquirido em Android. Vamos lá:
- Input: Essa é uma das partes mais complexas da engine, pois leva em consideração todos os tópicos e encrencas já descritas em tópicos anteriores do blog. Primeiramente, desenvolvi os managers de input para Single-Touch, Multi-Touch, Keyboard e Accelerometer, seguindo a lógica do beginning android 4 games development. Por fim, cada manager é devidamente configurado por uma classe genérica de tratamento de input e esta fica responsável por retornar as informações desejadas pelo usuário da engine sobre determinado sensor de eventos.
- Auxiliar de desenho: Para o desenho, implementei uma classe que renderiza primitivas, texto e bitmaps de forma fácil. No caso dos bitmaps, a classe aceita somente objetos de uma classe que implemente a interface de Bitmap. Assim, classe auxiliar de desenho pode fabricar instâncias de Bitmap com todos os métodos de retorno de informações a respeito do bitmap em questão já ajustadas. Essa classe auxiliar de desenho também oferece maneiras de carregar fontes.
- Game Manager: Essa classe condensa todos os recursos da engine. Assim, para ter acesso a todos os recursos, basta que cada classe do jogo guarde uma referência da instância do Game Manager.
- Essa classe é filha de Activity, ou seja, roda sobre a thread principal e deve ser sincronizada com a classe de Game Loop que roda em outra thread.
- Ela também é responsável por setar a próxima tela de jogo a ser exibida. Na lógica da engine, cada tela de jogo é tratada como filha da interface Screen e é a partir da transição de uma tela para outra que funciona a grande lógica dos games desenvolvidos com a engine. Assim, é possível criar novas telas para o jogo sem modificar o Game Manager, além da facilidade da abstração de cada tela, que facilita e muito a correção de bugs.
- Em geral, o esquema de desenvolvimento utilizando o Game Manager torna invisível grande parte das implementações da engine e usa grande parte dos principios de Padrões de Projeto, tendo o esquema de transição de telas o Padrão Strategy como carro chefe.
- Matemática: Para cálculo da matemática, a engine utiliza as classes de matrizes e pontos oferecidas pelo Android. Para os Vetores, utilizo a excelente biblioteca desenvolvida pelo professor Vinícius Godoy de Mendonça. Para cálculo de colisão, desenvolvi classes básicas para cálculo de colisão entre box alinhados e circulos e circulos com circulos. A parte de colisão entre dois boxes é oferecida pelo Android.
- Sprites: Para tratamento de animações, desenvolvi uma classe que recebe as configurações referentes ao comportamento da animação e o nome do arquivo, e a partir disso faz todo o trabalho sujo. Essa classe tem suporte a imagens da pasta drawable e assets, a sprites com sequência de quadros configurável e calcula o tempo de transição de quadro, bastando para o usuário apenas chamar o método update no campo de atualização da lógica do jogo em uma classe derivada da interface Screen.
- Com relação à transformações, desconhecia as matrizes Android quando iniciei a implementação da classe e acabei fazendo o cálculo da escala de imagens manualmente. Ainda não tive tempo hábil para continuar a implementação dessa classe utilizando os recursos de matrizes.
Todas as ideias aqui apresentadas correspondem às principais implementações da engine que desenvolvi para o projeto. Disponibilizei as interfaces neste link para consulta.
Espero que tenham gostado. E qualquer sugestão não deixem de postar... Até mais!
Nenhum comentário:
Postar um comentário
Obrigado por deixar a sua participação!