VGA – Tutorial 5 – Denthor

                       --==[ PARTE 5 ]==--
Autor: DENTHOR do ASPHYXIA
Atualizado por Snowman
Traduzido por Krull >>> tradução revisada e atualizada em 2019

Para obter os programas mencionados neste tutorial, por favor baixe o zip com a versão antiga do tutorial, neste link.

[Nota: essas coisas entre colchetes foram adicionadas pelo Snownan. O texto original ficou quase todo inalterado, exceto pela inclusão do material em C++]

Introdução

Olá! Este é o Denthor aqui com a quinta parte da série de treinamento em VGA do ASPHYXIA: A Saga do Scroll. Tenho muitos pedidos por informação sobre scroll, então eu decidi fazer isso no tópico dessa semana. Note que eu faço referência ao meu programa recém-lançado TEXTER5, que deveria estar disponível de onde quer que você tenha pegado essa mensagem. (Nota aos Sysops: Se você colocar a série em seus boards, por favor adicione WORMIE.ZIP e TEXTER5.ZIP, pois eles suplementam essa série)

A propósito, desculpem pela demora para esse tutorial aparecer. Testes, projetos, e alguns dias selvagens de pecado em Wild Coast conspiraram contra a pronta aparição dessa parte. Também, note que eu preciso de mais entrada sobre o que eu deveria fazer em partes futuras, então, deixe um email pra mim.

Se você gostaria de me contactar, ou ao time, há muitos modos que você pode fazê-lo:
1) Escrever uma mensagem para Grant Smith em email privado aqui ou na Mailbox BBS
2) Escrever uma mensagem aqui na conferência de Programação, aqui na Mailbox (de preferência se você tem uma pergunta geral de programação ou problemas de que poderia interessar a outros)
3) Escrever para ASPHYXIA na ASPHYXIA BBS
4) Escrever para Denthor, Eze ou Livewire na Connectix.
5) Escrever para
Grant Smith
P.O.Box 270 Kloof
3640
6) ligar para mim (Grant Smith) no número 73 2129 (deixe uma mensagem se você ligar quando eu estiver na faculdade)

OBS1 : Se você é um representante de uma companhia ou BBS e quer que a ASPHYXIA faça um demo para você, mande um email pra mim; podemos discutir.
OBS2 : Se você fez/tentou fazer um demo, MANDE PARA MIM! Estamos nos sentindo muito solitários e queremos encontrar/ajudar/trocar código com outros grupos de demos. O que você tem a perder? Mande uma mensagem aqui e podemos ver como transferir. Nós realmente queremos ouvir de você.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

O que é scroll?

Se você já viu um demo, você provavelmente viu alguma forma de scrolling. Nossa SilkyDemo tem um bom exemplo de scroll. O que ele é, é uma grande linha de texto cruzando a sua tela, normalmente da direita pra esquerda, por exemplo:

                                   H     : Passo 1
                                  He     : Passo 2
                                 Hel     : Passo 3
                                Hell     : Passo 4
                               Hello     : Passo 5
                              Hello      : Passo 6

etc. etc. Veja o programa em anexo para um exemplo de scroll.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Com o que fazemos scroll?

Geralmente, com letras. A maioria dos grupos põem saudações e informações em seus ‘scrollies’, quando são chamados. Você também pode rolar uma tela inteira usando a técnica de scroll. Rolar seu texto é muito menos chato que apenas colocá-lo na tela. Infelizmente, ‘scrollies’ têm sido usados tantas vezes em demos que estão parecendo um pouco fracos, então eles são geralmente acompanhados de uma figura legal, ou alguma rotina legal acontecendo ao mesmo tempo (em nosso SilkyDemo nós tínhamos um tabuleiro de damas se movendo e barras coloridas rolando ao mesmo tempo).

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Como rolamos de um lado pro outro?

A teoria por trás de rolagem (scroll) é muito fácil. Vamos imaginar que estamos rolando uma fonte 16×16, feita no TEXTER (;-)), atravessando o topo da tela (320 pixels). Como sabemos, a tela VGA começa em zero no topo esquerdo da tela, então contamos até 320, então volta à esquerda, um pixel pra baixo, no 320 (Veja o Tutorial 1). Isso significa que um scroller de 16*320 toma o espaço de 0 a 5119 na tela. Em ASCII, se pareceria com isso:

        (0)   .                                    .  (319)
        (320) .                                    .  (639)
                        "             "           "
       (4800) .                                    .   (5119)

Simples o suficiente. Agora o que fazemos é colocarmos a primeira linha-Y do primeiro caracter no lado mais à direita da tela, desse modo:

[Pascal]
      For loop1:=1 to 16 do
            Putpixel (319,loop1-1,font['A',1,loop1],vga);

[C++]
    for (loop1=0; loop1<16; loop1++)
            Putpixel (319,loop1,Font['A'][0][loop1],vga);

Isso vai desenhar alguma coisa no lado direito. Sua tela deveria se parecer com isso agora:

        (0)   .                                   X.  (319)
        (320) .                                   X.  (639)
                        "             "           "
       (4800) .                                   X.   (5119)

A seguir, movemos cada linha para a esquerda, ou seja:

[Pascal]
     For loop1:=0 to 15 do
            Move   (mem[VGA:loop1*320+1], mem[VGA:loop1*320], 320);

[C++]
     for (loop1=0; loop1<16; loop1++)
            memcpy (vga+(loop1*320)     , vga+(1+(loop1*320)),320);

Isso rola a tela de direita para a esquerda, que é o mais fácil de ler. Para rolar a tela da esquerda para a direita, troque o +1 para o outro lado do comando. Além disso, para aumentar o tamanho do pedaço rolado, aumente o “15” para seja lá quantas forem as linhas do topo que você quiser rolar-1.

Após esse movimento, sua tela vai se parecer com isso:

        (0)   .                                  X .  (319)
        (320) .                                  X .  (639)
                        "             "           "
       (4800) .                                  X .   (5119)
                                                  ^
                                            Note este espaço

O que você faz então é desenhar na próxima linha no lado direito, mover, desenhar a próxima linha, mover, etc. etc.. tah-dah! Você tem um Scrolly! Bastante simples, não é?

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Como rolar para cima ou para baixo?

Rolar para cima ou para baixo, é muito fácil também. Isso pode ser usado para ‘créditos do filme’ no final (uma vez eu escrevi um joguinho com um deserto rolando para baixo enquanto você era um robozinho no fundo da tela). A teoria é essa: Desenhar a linha de cima (ou de baixo) e então mover a tela toda:

[Pascal]
      Move  (mem[vga:0],mem[vga:320],63680);
                   { 64000 - 320 = 63680 }
[C++]
      memcpy (vga, vga+320, 63680);

Para rolar para baixo, ou:

[Pascal]
      Move (mem[vga:320],mem[vga:0],63680);

[C++]
      memcpy (vga+320, vga, 63680);

Para rolar para cima. Você então desenha a próxima linha e repete.

Por causa da simplicidade de codificar um scrolly, a maioria dos demos tem um. É geralmente melhor ter algo a mais acontecendo na tela, de modo que o espectador não ache muito chato, mesmo, como eu digo, se é apenas uma figura realmente legal.

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Fechando

A Universidade de Natal, Durban, Deptartamento de Ciência, agora tem 10 novos 486’s! Isso é uma grande bênção, já que agora eu posso programar umas rotinas legais durante o tempo livre (mesmo eu sendo um estudante de Comércio (Shhhhhh) 😉 ). Eu posso agora usar aquelas horas que antes eram desperdiçadas socializando e fazendo amigos, programando 😉

Eu sugiro que você pegue uma cópia do TEXTER, para fazer demos com fonts, ou na verdade para qualquer aplicação gráfica, é uma ajuda incrível, e temos usado para TODOS nossos demos. (P.S. Temos muitos demos escritos, mas muitos deles foram escritos para companhias e não foram lançados para o público geral)

NOTA: Para o programa de teste do TEXTER, TEST.PAS, adicione {$X+} {$R-} se você tiver checagem de escalas ligadas (eu codifiquei com ela desligada).

        [  "Eu sou da Agência de Inspeção de Computadores, senhor,
        estou aqui para checar seu computador. Aqui
        está minha identificação."
    "Certamente. Dê uma olhada. Eu estou limpo. Eu não tenho
        software pirata."
    O homem senta em frente ao computador. Ele nota o fato
        que o mesmo está desligado com um olhar de 
        desdém. Ele anota na sua tabela. Inicia a máquina.
    "O que é isso?" pergunta, apontando para a tela.
    "É o MasterMenu" gagueja o homem. "Eu mesmo escrevi!"
    "Você sabe a pena por usar lixo como esse numa máquina privada?"
        O homem da agência sorri. "É uma sentença de 
        dois meses!"
    "Desculpe senhor! Não vai acontecer de novo!"
    "Eu sei. Vou me certificar disso." Ele sorri de novo.
    O homem da agência percorre o HD, procurando software ilegal,
        programas maus e propaganda anti-governo. Ele nota
        com satisfação que tem o suficiente para colocar
        esse cara longe por dez anos, não que ele tenha
        se interessado. Ele poderia geralmente apenas maquiar.
    Ele vem para a última entrada da árvore de menu em ordem 
        alfabética. Suas mãos sacodem pra longe do teclado. 
        Então, tenporariamente, ele digita as três letras da morte.
        Ele olha para o homem, que está se afastando com olhos
        arregalados e suas mãos esticadas em frente a ele, como se fosse para evitar um golpe.
    O homem da agência sorri, seus lábios como uma linha dura, fina.
           "Windows!"
                                                                 ]
                                                   - Grant Smith
                                                  1:55 da tarde
                                                     16/9/93

Saudações,
– Denthor
– Krull

A Nova Krull's HomePage