Strips de animação
Aprenda como usar o novo recurso de tiras de animação

Para que o exemplo a seguir fique claro, vamos começar do começo, ou seja, como se estivéssemos fazendo um novo jogo. O primeiro passo é criar o diretório onde ele estará (o jogo terá o nome de "teste1" e o prefixo será "ts1").

Para variar um pouco, vamos remodelar a aparência do exemplo, com o propósito inclusive de mostrar alguns macetes novos e diferentes, na forma como cada autor pode tratar a sua interface de jogo. A primeira providência é criar um novo painel geral de jogo. Bolamos um bem modernoso...

Se não sabe como fazer ou não tem "dons artísticos", clique aqui e baixe o pacote zip (strip.zip) com as modificações (basta descompactar e sobrepor os arquivos do diretório onde está o jogo).

Vá à edição dos gráficos e reposicione os elementos e controles, de modo a ficar compatível com o novo painel. Edite a posição 1 e coloque como número de tela o valor 1. Altere o tipo de arquivo gráfico de bmp para jpg. Agora estamos prontos para começar...

Imagine que a tela 1 é o cenário inicial: o jogador vê a estradinha, uma grande árvore, as montanhas ao fundo e, quando clicar em algum lugar (clique aqui), crau... um dragão vai passar voando pela tela.

O dragão, é claro, é uma tira de animação que chamamos de strip e acompanha o pacote zip que você baixou a pouco. Para colocar o dragão na tela, precisamos definir as coordenadas x,y ou usar um dos links para posicionar o início da animação. Para animações que não se movem na horizontal ou vertical, é mais fácil e simples usar os links.

Mas vamos usar o link 1, sobre as palavras "clique aqui", para servir como chave de ativação da animação. A tira, bem como seus parâmetros, serão definidos em uma nova função (30) que criaremos a seguir (lembre-se de colocar na ação do link 1 a função 30).

Função 30: O Vôo do dragão                       
   col 10
   lin 10
   strip 1,6,0,0
   tempo 30
   nvc

As instruções lin e col são óbvias: definimos o canto superior esquerdo de onde será colocada a figura do dragão. A instrução strip é nova:

STRIP N,T,Q,L
Define uma tira de animação e carrega-a no buffer apropriado (só uma tira de cada vez estará disponível, portanto, usar mais de uma tira numa única animação pode comprometer o processamendo do jogo, porém como os computadores não param de ficar mais potentes a cada dia...)

N = Número da tira (prefixo + 'st'+ número .bmp);
T = quantidade total de "frames" na tira;
Q = quantidade de execuções completas da tira, se = 0 não para mais;
L = número do link do canto superior esquerdo onde será colocada a animação, se = 0 então as coordenadas usadas serão obtidas de Lin e Col.

A animação pode ser ligada ou desligada, definindo-se um intervalo de tempo entre os frames:

TEMPO X
Define o tempo entre os frames e liga a animação:
X = 0 desliga a animação; X <> 0 liga a animação e indica quantos milisegundos separam os frames.

Esse esquema permite ligar a animação do dragão em algum ponto da tela, desde que ela não sofra deslocamentos. Serve para animar elementos de cena, como um ventilador de teto, uma televisão ligada, um pisca-pisca, porta abrindo, etc.

Para ocorrer movimento é preciso usar a instrução:

DESLOC X,Y
Define o deslocamento do canto superior esquerdo do frame (do strip) a cada nova impressão. Valores maiores que 100 indicam deslocamento negativo.

Para deslocamentos horizontais, basta alterar X, para os verticais, alterar Y. A função que liga a animação fica então:

Função 30: O Vôo do dragão                       
   col 10
   lin 10
   strip 1,6,0,0
   desloc 10,0
   tempo 30
   nvc

Existe ainda uma instrução:

FRAME X
Coloca na tela, na posição correspondente, apenas o frame X da tira. Se X = 250, coloca o frame atual; se X = 252, coloca o frame atual e incrementa o contador de frames.

Tudo certo. Só que aquele dragãozinho passando em frente da árvore não "cola". Para ficar convincente, ele tem que passar por trás dela. Como resolver isso? Criamos uma nova instrução:

MASK X
Define uma máscara de tela (prefixo + "X" + 'msk.bmp'), a ser plotada na visão do jogador, sempre que houver um refresh de tela. Se X = 0, então nenhuma máscara é plotada da tela.

Ou seja, podemos definir um arquivo gráfico (figura) que estará sendo colocada na tela sempre antes dela ser mostrada ao jogador, sobrepondo tudo mais que lá houver. Notou que nesse nosso exemplo o painel do jogador possui uma parte que "invade" o visor do jogador? Essa instrução serve para fazer uma firula visual com o painel, mas nós podemos usá-la como truque de animação. Vamos primeiro colocar o pedaço invador (o nome do arquivo é "ts11msk.bmp":

A função 1, que inicializa o jogo, deve conter a definição desta máscara:

Função 1: inicialização
   lin 0
col 373
mask 1 ...

O truque aqui é criar uma máscara que contenha a parte da árvore que irá estar "na frente" do dragão:

No momento que "ligarmos" a animação do dragão (função 30), substituimos o arquivo que define a máscara:
Função 30: O Vôo do dragão                       
   col 10
   lin 10
   strip 1,6,0,0
   desloc 10,0
   lin 0
col 31
mask 2
tempo 30 nvc

Pronto. É só isso. Como estamos tratando de grandes áreas de sobreposição, além de uma impressão a uma taxa de 30 quadros por segundo, em micros menos potente isso pode representar um problema. Para otimizar a plotagem, crie a máscara no esquema figura e máscara de impressão. Use um valor acima de 50 para indicar o número da máscara e o arquivo preto e branco deverá se chamar "prefixo + "X" + msb.bmp".

 
online