Quanto ao movimento, ha varios modos de faze-lo com perfeicao.
1. Usando o PCOPY
2. Usando bordas da cor-de-fundo nas figuras capturadas com GET
3. Usando o metodo de apagar e desenhar
Metodo 3:
Voce deve apagar a figura anterior e por a figura nova, e assim por diante.
Esse metodo e' o mais ineficiente, pois `AS VEZES (depende do caso) pode
"piscar".
---- Programa -----
No final do e-mail eu estou mandando um programa, que faz uma animacao
usando esse metodo, e explicando sua logica.
Metodo 2:
Na hora de capturar suas figuras com o GET, procure deixar uma borda da cor
do fundo (geralmente preta). Se voce deixar uma borda de 3 pixels, entao a
sua figura podera se mover no maximo de 3 em 3 pixels. Se usar 5, pixels,
de cinco em cinco, e assim por diante
---- Programa -----
Eu acabei de fazer um programa com esse metodo, especialmente para voce ver
como funciona.
Metodo 1:
Nao sao todos os modos de tela (SCREEN) que suportam o PCOPY. Para saber
quais sao os modos de tela que aceitam o comando, consulte "Modos de Tela",
no help do Qbasic. Um exemplo de modo de tela grafica que permite o uso do
PCOPY e' o 7 (320x200, 16 cores, paginas de memoria 0-7).
Vou explicar como se usa o PCOPY
Aula de PCOPY
=============
O PCOPY serve para copiar as pagina de memoria de video. Antes, precisamos
saber o que e' isso.
Paginas de memoria de video
===========================
Alguns modos de tela, suportam que voce use varias telas ao mesmo
tempo. Essas telas sao as paginas de memoria de video. Voce, provavelmente,
so usou a pagina de memoria 0 (zero), que esta' presente em todos os modos
de tela. Mas voce pode, ao mesmo tempo, desenhar em uma pagina enquanto
visualiza outra. Este recurso e' muito importante quando voce quer obter
uma animacao.
De uma olhadinha logo abaixo:
SCREEN 7, 0, 1, 0
| |
| |
| +--- Pagina que voce esta vendo
|
+------ Pagina onde voce esta desenhando
Se voce comecar um programa com SCREEN 7, 0, 1, 0 e tentar desenhar alguma
coisa, voce nao vera nada, pois voce esta desenhando na pagina 1, mas esta
vendo o que esta acontecendo na pagina 0.
Mas, se voce quiser copiar o conteudo da pagina 1 para a pagina 0, ai' voce
vera o desenho. Para isso, voce deve usar:
PCOPY 1, 0
| |
| |
| +--- Pagina de destino: para onde voce quer copiar
|
+------ Pagina de origem: a que voce quer copiar
So para voce se localizar, abaixo vem um exemplo:
'Inicio do programa
SCREEN 7,0,1,0
LINE (100,100)-(120,120),14,BF 'E' um quadrado amarelo
GET (100,100)-(120,120), quadrado 'Captura o quadrado
'OBS.: Voce nao esta vendo o quadrado, pois ele esta desenhado na pagina 1,
'enquanto voce esta vendo o que esta na pagina 0. Se usar PCOPY 1,0, entao
voce 'estara copiando a pagina 1 para a pagina 0, entao vera o quadrado.
CLS 'Limpa a tela da pagina 1, para eliminar o quadrado
FOR x = 1 to 180 STEP 3'O quadrado vai do ponto 1 ate o 180 de 3 em 3
PUT (x, 100), quadrado 'Poe-se o quadrado na posicao indicada, mas voce
'ainda nao esta vendo-o.
PCOPY 1,0 'Agora voce esta vendo o quadrado, pois copiou o
'quadradinho para a tela que voce esta vendo (0)
CLS 'Agora limpamos a tela 1. Atencao nisso! Voce conti-
'nua vendo o quadrado, pois voce limpou a pagina 1.
NEXT x
'Fim do programa
Exemplo do Metodo 3
========
DECLARE SUB pista ()
SCREEN 13
pista
FOR raio = 160 TO 1 STEP -1
CIRCLE (160, 100), raio + 1, 0
CIRCLE (160, 100), raio, 31
pista
FOR t = 1 TO 1000: NEXT
NEXT
' Para fazer este programa eu usei a seguinte logica:
'
' Eu desenho a pista
' Eu defino que o raio do circulo vai ficando cada vez menor (o circulo diminui)
' Entao eu faco um circulo preto (cor de fundo) um ponto maior que o definido
' ! Em outras palavras, eu faco um circulo preto em lugar do circulo
'-! branco que havia antes.
' Ai fica um buraco na pista... Mas e'‚ so desenha-la de novo!
' E ai voce da' um tempinho pequeno ate' ele desenhar outro circulo, menor
' E tudo se repete!
SUB pista
LINE (160, 100)-(250, 200), 25
LINE (160, 100)-(200, 200), 26
LINE (160, 100)-(150, 200), 26
LINE (160, 100)-(100, 200), 25
END SUB
Exemplo do Metodo 2
SCREEN 13
tamanho = 10: borda = 3
DIM Caixa(121)
LINE (100, 100)-(110, 110), 14, BF
GET (100 - borda, 100 - borda)-(110 + borda, 110 + borda), Caixa
CLS
FOR x = 1 TO 300
PUT (x, 100), Caixa, PSET 'Coloca a caixa
FOR t = 1 TO 1000: NEXT t 'Da um tempinho
NEXT x