O
código do Alien é extremamente simples: um
contador cuja faixa vai de 0 a 700, definido como
a barra de vida do bichinho, determina todos os acontecimentos
importantes do jogo e que não dependem da interferência
do usuário.
Assim,
a cada estágio da vida, uma animação é
acionada. Este contador está funcionando num TTimer
que foi ajustado para produzir um evento a cada 2,5 segundos aproximadamente.
As
animações são procedimentos fechados, ou
seja, elas possuem um código próprio que as produz
e esse código está contido numa única procedure.
Com isso o que temos é que, ao ser acionada, a animação
suspende os eventos e controles até que termine o processamento.
Este
recurso permite um movimento bem mais suave e sem aquela irritante
"quicada" do elemento. Em contrapartida, a animação
bloqueia todo o resto do programa enquanto ela está se
desenvolvendo.
Isto
funciona bem em casos como este do Alien, onde as animações
são exporádicas e no momento em que ocorrem o usuário
naturalmente irá prestar atenção nela e não
nos demais recursos e funções do sistema.
Este
tipo de animação usa muito a função
sleep(x) para produzir pequenas pausas no processamento do programa.
Além disso, ela se baseia na montagem geral da imagem,
numa TImage, que depois é imediatamente transmitida
para a tela (função Repaint).
Coloquei
nesta página, à disposição dos interessados,
um exemplo do braço mecânico trazendo o ovo, onde
foi usada a mesma técnica de construção da
imagem, porém a animação foi inserida num
TTimer. Ele ilustra bem como esse tipo de construção
acarreta pequenos saltos na imagem, devido ao funcionamento interno
do Delphi e do Windows.
Nesta
construção não foi preciso usar o Direct-X
para os sons, mas isso exige que o arquivo wav correspondente
esteja presente no diretório.
Como
não há nada de extraordinário com o código
do Alien, não iremos comentar aqui nenhum trecho. Basta
carregar o fonte no Delphi e analisar como cada componente funciona.
Se tiver dúvida, pode perguntar via e-mail.
Clique
aqui para baixar o fonte completo e aqui
para um fonte alternativo. |