Curso de Basic
MSX 2 - Efeitos de Transição


  Tanto o projeto Screen 2 show, como o programa Graphos III, criam efeitos de transição para apresentar imagens na tela, utilizando imagens no formato da screen 2.
  Com o advento do MSX 2, as páginas de vídeo surgiram, bem como comandos em Basic para copiar trechos de tela. Dessa forma, os efeitos de transição podem ser facilmente realizados em Basic.


  O Comando COPY do MSX 2

  O comando COPY permite a cópia de um trecho de um local da tela para outro local da tela, permitindo também cópia entre diferentes páginas de vídeo.

  Sintaxe:
COPY (Xi, Yi)-(Xf, Yf),página_origem TO 
(Xd, Yd),página_destino[, operação_lógica]

  Visualmente, temos:
 Xi,Yi
   |
   +────┐            
   │    │          Xd,Yd
   │    │            |
   └────o            +────┐
        |            │    │
      Xf,Yf          │    │
                     └────o

  Podemos controlar a orientação da cópia, através da ordem das coordenadas iniciais e finais. No exemplo anterior, Xf > Xi e Yf > Yi.

  Se Xf < Xi, temos:
 Xf,Yi
   |
   +────┐            
   │    │          Xd,Yd
   │    │            |
   └────o       +────┐
        |       │    │
      Xi,Yf     │    │
                └────o
  Exemplo:
COPY(100,0)-(0,100),0 TO (150,150),0

  Se Yf < Yi, temos:
 Xi,Yf
   |
   +────┐            +────┐            
   │    │            │    │
   │    │            │    │
   └────o            └────o
        |            |
      Xf,Yi        Xd,Yd
                     
  Exemplo:
COPY(0,100)-(100,0),0 TO (150,150),0



  Efeitos de transição em Basic

  Visto o comando COPY, iremos utilizá-lo para criar as transições.

  O código base para todos os efeitos de transição é o seguinte.
10 SCREEN 5
20 SET PAGE 0,1
30 BLOAD"imagem.s05",S
40 SET PAGE 0,0


  Efeitos do Screen 2 Show

  Primeiramente, vamos recriar as transições do projeto Screen 2 Show.

  Efeito 1: Da esquerda para a direita.
50 FOR X=0 TO 255
60 COPY(X,0)-(X,211),1 TO (X,0),0
70 NEXT X
80 GOTO 80

  Efeito 2: De cima para baixo
50 FOR Y=0 TO 211
60 COPY(0,Y)-(255,Y),1 TO (0,Y),0
70 NEXT Y
80 GOTO 80

  Efeito 3: Diagonal
50 FOR X=0 TO 255
60 Y = X*0.82745098
70 COPY(X,0)-(X,Y),1 TO (X,0),0
80 COPY(0,Y)-(X,Y),1 TO (0,Y),0
90 NEXT X
100 GOTO 100

  Efeito 4: Caracol
50 Xi=0:Xf=255:Yi=0:Yf=211
60 FOR X=Xi TO Xf step 8
70 COPY(X,Yi)-(X+7,Yi+8),1 TO (X,Yi),0
80 NEXT X
90 FOR Y=Yi TO Yf step 8
100 COPY(255-Xi,Y)-(255-Xi-7,Y+7),1 TO (255-Xi,Y),0
110 NEXT Y
120 FOR X=Xf TO Xi step -8
130 COPY(X,211-Yi)-(X+7,211-Yi-7),1 TO (X,211-Yi),0
140 NEXT X
150 FOR Y=Yf TO Yi step -8
160 COPY(Xi,Y)-(Xi+7,Y+7),1 TO (Xi,Y),0
170 NEXT Y
180 Xi=Xi+8:Xf=Xf-8
190 Yi=Yi+8:Yf=Yf-8
200 IF Xi<Xf THEN 60
210 GOTO 210

  Efeito 5: Frame in
50 FOR X=0 TO 127
60 COPY(X,X)-(255-X,X),1 TO (X,X),0
70 COPY(X,X)-(X,211-X),1 TO (X,X),0
80 COPY(255-X,X)-(255-X,211-X),1 TO (255-X,X),0
90 COPY(X,211-X)-(255-X,211-X),1 TO (X,211-X),0
100 NEXT X
110 GOTO 110


  Outros efeitos de transição

  Efeito 1: Linhas alternadas e encaixadas na vertical.
50 FOR X=0 TO 255 STEP 2
60 COPY(X,0)-(X,211),1 TO (X,0),0
70 COPY(255-X,0)-(255-X,211),1 TO (255-X,0),0
80 NEXT X
90 GOTO 90

  Efeito 2: Linhas alternadas e encaixadas na horizontal.
50 FOR Y=0 TO 211 STEP 2
60 COPY(0,Y)-(255,Y),1 TO (0,Y),0
70 COPY(0,211-Y)-(255,211-Y),1 TO (0,211-Y),0
80 NEXT Y
90 GOTO 90

  Efeito 3: Linhas alternadas e encaixadas na diagonal.
50 FOR X=0 TO 255 step 2
60 Y = X*0.82745098
70 COPY(X,0)-(X,Y),1 TO (X,0),0
80 COPY(0,Y)-(X,Y),1 TO (0,Y),0
90 COPY(255-X,0)-(255-X,211-Y),1 TO (255-X,0),0
100 COPY(0,211-Y)-(255-X,211-Y),1 TO (0,211-Y),0
110 NEXT X
120 GOTO 120

  Os efeitos apresentados até aqui utilizam cópia de linhas ou pequenos blocos, mas não uma parte grande da tela.
  O efeito a seguir junta as duas metades da imagem no centro da tela. Repare que a cada iteração, é copiada a metade de cada parte da imagem, deixando o efeito bastante lento.

  Efeito 4: Metades deslizantes.
10 SCREEN 5
20 SET PAGE 0,1
30 BLOAD"quarteto.s05",S
40 SET PAGE 0,0
50 FOR X=0 TO 127
60 COPY(127,0)-(0,211),1 TO (X,0),0
70 COPY(128,0)-(255,211),1 TO (255-X,0),0
80 NEXT X
90 GOTO 90

  O efeito de deslocar a imagem da esquerda para a direita também é lento, pois copia toda a imagem a cada iteração.

  Efeito 5: Deslocamento da esquerda para a direita.
50 FOR X=0 TO 255
60 COPY(255,0)-(0,211),1 TO (X,0),0
70 NEXT X
80 GOTO 80
  Observe que nesse efeito e no anterior, a porção da esquerda da imagem teve a orientação alterada, de forma que o desenho da tela fosse colocado à esquerda da origem, e, conseqüentemente, escondesse a imagem.

  O efeito a seguir utiliza o recurso de scroll do MSX 2+ para deixar o efeito 5 mais rápido.

  Efeito 6: Deslocamento da esquerda para a direita, com o SET SCROLL.
50 FOR X=255 TO 0 STEP -1
60 SET SCROLL X,0
70 COPY(X,0)-(X,211),1 TO (X,0),0
80 NEXT X
90 GOTO 90


  Considerações Finais

  Foi visto nesse tutorial, a facilidade de se criar efeitos de transição no MSX 2. Entretanto, algumas operações se tornam lentas, seja devido às limitações da máquina, seja pela limitação do Basic.
  As operações pontuais estão completamente descartadas em Basic, pois o resultado pode levar alguns minutos.
  Desse modo, teremos que utilizar a linguagem Assembly para conseguirmos tal feito, podendo aproveitar os conceitos apresentados aqui.

  Para ilustrar como operações pontuais são feitas no MSX 2, o programa a seguir copia da imagem na página 1 para a página 0 da screen 5.
10 SCREEN 5
20 FOR F=0 TO 255*211
30 VPOKE F, VPEEK(&h8000+F)
40 NEXT F

  Uma vez criado o programa em Assembly, repita as linhas 10-40. Na linha 50, carregue e execute o programa em linguagem de máquina.



MARMSX/CURSOS/Basic