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...)
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".