terça-feira, 8 de dezembro de 2009

A epopéia do Sound Design-Parte II

Continuando com a descrição da programação dos sons, vamos falar de um recurso que me foi muito útil e pode ser aplicado em diversas situações: O Gambetão!


Ma..ma...mas o que é isso!?!?

Sim, é um grande retângulo verde que cobre todo o stage. Em algumas situações de sonorização não era nada conveniente colocar as coordenadas do palco o tempo todo, visto que deixaria os "ifs" do código muito extensos horizontalmente, prejudicando a legibilidade do programa. Então, o gambetão é exatamente isso: um substituto rápido para as coordenadas de onde o jogo acontece.
Um exemplo da sua aplicação está no terceiro estágio, onde temos alguns barris que caem constantemente do convés do navio onde o pirata se encontra. Era necessário fazer o som do barril caindo disparar apenas quando ele entrasse no palco, e somente uma vez enquanto ele estivesse caindo. E é aí que entra outro recurso usado: o gambisForte.
Vejam! Um quadradro preto abaixo do barril!!
O gambisForte determina quando o efeito sonoro será disparado, é um recurso alternativo para sonorizar o barril a partir da sua posição Y no stage, e funciona muito bem.
Então, basta mandar que o som seja disparado quando o barril colidir com o gambisForte. Contudo, um controle por "cooldown" será necessário, uma vez que enquanto o barril estiver colidindo com o objeto durante a queda, o som será tocado repetidas vezes, causando um resultado desastroso! Então, basta mandar o som tocar se o contador for 0(zero) e ser resetado quando o barril for removido e o próximo estiver chegando.
Obviamente, o som deve tocar apenas quando o jogador estiver simultaneamente na tela com o barril, caso contrário, desde o início da fase o jogador poderá ouvir o som sendo que os barris ainda estão longe! Aí temos que voltar para o Gambetão, então o código ficou assim:
createEmptyMovieClip("fallinlove",6);
barrel = new Sound(fallinlove);
barrel.attachSound("barrel");
barrel.setVolume(0);
Declarando o som do barril primeiro é claro! Lembre-se de associar o som a um movie clip vazio, para poder controlar seu volume individualmente. Como o nome do movie clip fantasma não influência muito no código, vamos chamá-lo de "fall in love". Lembre-se também de colocar o movie clip em um Depth ainda não utilizado(6, nesse caso).
Aí sim vamos para a condição:
function checaSom()
{
if(gambetao.hitTest(barco2.gambisForte1))
{
if((barco2.barril.hitTest(barco2.gambisForte1)) && (sound == "on"))
{
barrel.setVolume(100);
if(cdbarril == 0)
{
barrel.start(0,1);
cdbarril=51;
}
}
}
else
{
barrel.setVolume(0);
}
}
Traduzindo: Se o Gambetão tocar no gambisForte e enquanto este estiver tocando no barril e o som do jogo estiver ligado, torna o máximo o valor do volume do som, além disso, se o Cooldown do som do barril for 0(zero), toca o som e muda o valor do cooldown para 51. Se a primeira condição não for satisfeita, zera o volume do som.
O Cooldown assume valor 51 pois é o tempo aproximado que leva para o barril percorrer a tela e voltar para cima, se cálculos cronometrados como esse forem importantes no seu código, não deixe de fazê-los! Não esqueça também de decrementar o valor do Cooldown a cada frame, para quando ele estiver próximo de colidir novamente com o gambisForte o som estará pronto para tocar novamente.
Por fim, basta deixar o gambisForte "invisível" mudando seu alpha para 0%, e ocultar o Gambetão com a camada do cenário para que o jogador não os veja.
Complexo? Talvez, mas para fazer seu jogo funcionar você deve experimentar todos os recursos possíveis, ainda que eles não sejam "códigos éticos"(isso existe?).
Agora que você conheceu um pouco mais do trabalho dos efeitos sonoros, da próxima vez que jogar o Run, Pirate, Rum! lembre-se que o Gambetão está seguindo você o tempo todo...e nunca se sabe onde estarão mais gambisFortes escondidos, então, tome cuidado!

Nenhum comentário:

Postar um comentário