domingo, 20 de maio de 2012

paSDLMusicPlayer

Olá!


Lembrando dos assuntos referentes ao último post, a parte de som da engine estava praticamente concluída, exceto por alguns problemas de encapsulamento envolvendo funções friend e variáveis estáticas.


Este problema se agravou quando fui implementar as ultimas funcionalidades, as quais envolviam dar stop em todos os sons, pausar todos os sons ou retomá-lo a partir do ponto de onde pararam. O grande problema envolvido nessas funcionalidades estava na ausência de um mecanismo ágil de conversação entre as classes. além da perigosa declaração das mesmas como friend. Analisando a situação, percebi que era inviável continuar e resolvi aumentar a complexidade das classes em virtude da iminente necessidade de um gerenciador decente!


Como diria Carlo Ginzburg em "O Queijo e os Vermes": VOLTAMOS À ESTACA ZERO!


Buscando maneiras de melhorar a conversa entre uma possível classe gerenciadora dos atributos de todas as músicas, me decidi pela velha companheira herança que nunca cessa em ajudar os desesperados por uma relação de hierarquia melhor que a dos velhos e tediosos ponteiros usados em C, através de uma dica da Keli para o meu problema.


O grande diferencial seria que, mesmo possuindo uma alta gama de variáveis estáticas controladoras, eu ainda conseguisse manter um encapsulamento decente e funcionalidades relacionadas à manipulação de músicas dentro do seu devido escopo. Dessa forma a classe pai foi nomeada para paSDLMusicPlayer.

Tendo um gerenciador encapsulado para os atributos das musicas do game, a maioria dos meus problemas com variáveis estáticas e complexidade excessiva se resolveu, exceto pela perda de tempo ocasionada pelo esquecimento da declaração do destrutor da classe pai como virtual (hehehehe...).

Com um escopo mais protegido, fiquei livre para aumentar as funcionalidades. Agora é possível receber da paSDLMusic retornos contendo o ID da música, qual é a música atual que está tocando, se a música X está ou não reproduzindo e aumentar o volume de todas as músicas ou de uma específica.

Em resumo, com paSDLMusicPlayer, a reprodução de músicas ficou extremamente poderosa na engine, possibilitando diversas abordagens facilitadas para tratamento dos queridos sons que acompanham o fundo dos nossos jogos.

Essa nova classe me possibitou também tornar toda a paSDLMusic independente da paSDLAudio, sendo esta responsável apenas por inicializar a biblioteca SDL_Mixer e reservar as constantes de audio como o volume máximo permitido.

Ainda tenho que adaptar o desenvolvimento para a paSDLSoundEffect. Se eu conseguir tal façanha, sem novamente encontrar outro grande erro que me faça reiniciar a construção das classes, a parte de som estará concluída!

Nenhum comentário:

Postar um comentário