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