MSXInício
Capítulo 20Disponível

BOBs: objetos animados por blitter

Sprites do MSX 2 continuam limitados a 8 por linha. BOBs são figuras copiadas por blitter sobre o bitmap — sem flicker, do tamanho que você quiser e coloridas por pixel.

1. Por que BOBs, se já existem sprites?

Os sprites do V9938 são rápidos e não custam CPU, mas herdam duas restrições clássicas do MSX: no máximo 8 sprites por linha (o resto some ou pisca) e apenas uma cor por linha. Para um shoot-em-up com tiros, inimigos e explosões coloridas ao mesmo tempo, isso é apertado.

A alternativa é o BOB — Blitter OBject. Um BOB é uma figura desenhada como se fosse parte do cenário: o blitter do V9938 copia o padrão sobre a página visível, salvando primeiro o fundo (para poder restaurar no próximo frame). Vantagens:

  • Sem limite de 8 por linha — o gargalo agora é só o tempo de blit por frame.
  • Cor real — cada pixel do BOB pode ter qualquer uma das 16 cores.
  • Tamanho livre — de 8×8 até 128×64 (agrupando slots grandes).
  • Transparência — a cor 0 do padrão deixa o fundo aparecer.

O preço é gastar VRAM extra (buffers de save do fundo) e um pouco de tempo de blitter por frame. Para dezenas de tiros e inimigos em SCREEN 5, ainda assim compensa.

2. Comandos essenciais

ComandoO que faz
BOB CREATE slot, dados, w, hRegistra a figura no slot (0..7)
BOB CREATEBIG slot, dados, w, hFigura grande: largura 32/64/96/128 e altura 32/64 (slots = largura ÷ 32)
BOB MOVE slot, x, yApaga o fundo antigo, desenha o BOB em (x, y)
BOB ERASE slotApaga o BOB e restaura o fundo
BOB HFLIP slotEspelha horizontalmente o padrão do BOB (in-place)
BOB PAGEFLIP ON / OFFAtiva/desativa o desenho em duas páginas
BOB FLIPAguarda o VBLANK e apresenta a página pronta quando o pageflip está ativo
BOB SYNCNa implementação atual, faz o mesmo que BOB FLIP

Slots são um recurso escasso: 0 a 7, oito no total. Um BOB CREATEBIG reserva largura ÷ 32 slots consecutivos, contando o slot raiz. Uma figura de 64 pixels de largura usa dois; raízes 0, 2, 4, 6 facilitam organizar esses pares, mas não são uma exigência do comando. Não reutilize os slots reservados por outra figura.

3. Um BOB que anda com o joystick

DIGITE E VEJA

Programa 20.1 — Herói controlado pelo joystick

USES SCREEN 5, BOBS, KEYBOARD
SCREEN 5
COLOR 15, 4, 4
CLS

ASM
Heroi:
  ' 16x16 = 128 nibbles = 128 bytes (4bpp packed pelo Sprite Editor)
  ' ... exporte pelo Sprite Editor MSX2 ...
END ASM

BOB CREATE 0, Heroi, 16, 16

DIM x AS BYTE = 120
DIM y AS BYTE = 100

WHILE STRIG(0) = 0
  IF STICK(0) = 3 THEN x = x + 2
  IF STICK(0) = 7 THEN x = x - 2
  IF STICK(0) = 1 THEN y = y - 2
  IF STICK(0) = 5 THEN y = y + 2
  BOB MOVE 0, x, y
  DELAY 1
WEND

DICA

O Sprite Editor exporta BOBs prontos

Ao desenhar uma figura no Sprite Editor MSX2 (SCREEN 5), a IDE oferece a exportação como bloco ASM já com o rótulo (Heroi:, Nave:, etc.) e o padrão em 4 bits por pixel. Basta colar antes do BOB CREATE.

4. Animação: alternando frames em slots diferentes

A técnica clássica é ter um slot para cada quadro da animação (parado, correndo 1, correndo 2, correndo 3) e alternar qual você chama em cada frame do jogo. Enquanto um slot está visível, o BOB ERASE dos outros mantém a tela limpa.

DIM frame AS BYTE = 0

WHILE STRIG(0) = 0
  frame = (frame + 1) MOD 4
  IF frame = 0 THEN BOB MOVE 0, x, y   ' Run1
  IF frame = 1 THEN BOB MOVE 2, x, y   ' Run2 (BIG, slot par)
  IF frame = 2 THEN BOB MOVE 4, x, y   ' Run3
  IF frame = 3 THEN BOB MOVE 6, x, y   ' Parado
  DELAY 6
WEND

5. HFLIP — economizando VRAM

Um jogo de plataforma normalmente precisa do herói correndo para os dois lados. Em vez de exportar quatro frames virados à direita e quatro à esquerda, o CrossScript oferece BOB HFLIP slot: ele inverte o padrão do slot na VRAM, in-place. Custo: um blit; economia: metade da VRAM.

' Herói veio virado à direita. Antes de correr à esquerda, espelha:
BOB HFLIP 0
BOB HFLIP 2
BOB HFLIP 4
BOB HFLIP 6
' A partir daqui, os mesmos slots desenham o herói virado à esquerda.

BOB HFLIP alterna o espelhamento: chamar duas vezes volta ao original (não é idempotente). Trate o estado (virado para onde) na sua própria lógica.

6. BOB PAGEFLIP: adeus flicker

Mover um BOB é: apagar fundo antigo → desenhar na posição nova → restaurar fundo. Enquanto isso, o feixe eletrônico está desenhando a tela — resultado: o jogador vê o objeto piscando por um instante.

A cura é o page flipping: desenhar numa página escondida (a back buffer) e, no VBLANK, trocar qual página o VDP mostra. O CrossScript oferece estes comandos:

  • BOB PAGEFLIP ON — ativa; a partir daqui o BOB MOVE desenha na página escondida.
  • BOB PAGEFLIP OFF — desativa.
  • BOB FLIP — espera o blitter terminar e o próximo VBLANK, exibe a página pronta e prepara a outra para desenhar.

FLIP não espelha a figura: aqui significa troca de página (page flip). Para virar o desenho horizontalmente, use BOB HFLIP slot. Com pageflip desligado, BOB FLIP espera as cópias pendentes e o próximo VBLANK, sem trocar páginas.

O BOB PAGEFLIP ON também clona automaticamente o fundo da página 0 para a página 1, para o back buffer não começar azul. Se você chamar um PAGELOAD depois de ligar o pageflip, o CrossScript detecta e reespelha sozinho — a ordem deixou de importar.

DIGITE E VEJA

Programa 20.2 — Corrida ida-e-volta sem flicker

USES SCREEN 5, BOBS, KEYBOARD
SCREEN 5 : COLOR 15, 4, 4 : CLS

ASM
Nrun1:  ' 16x16 (exportado do Sprite Editor)
Nrun2:
Nrun3:
Nstop:
END ASM
' ... outros frames ...

BOB CREATE 0, Nrun1, 16, 16
BOB CREATE 2, Nrun2, 16, 16
BOB CREATE 4, Nrun3, 16, 16
BOB CREATE 6, Nstop, 16, 16

BOB PAGEFLIP ON        ' back buffer já espelha o fundo atual

DIM x AS BYTE = 20
DIM frame AS BYTE = 0

' --- Ida (esquerda -> direita) ---
WHILE x < 220
  x = x + 2
  frame = (frame + 1) MOD 3
  IF frame = 0 THEN BOB MOVE 0, x, 100
  IF frame = 1 THEN BOB MOVE 2, x, 100
  IF frame = 2 THEN BOB MOVE 4, x, 100
  BOB FLIP
WEND
BOB MOVE 6, x, 100
BOB FLIP
DELAY 60

' --- Volta: espelha e retorna ---
BOB HFLIP 0 : BOB HFLIP 2 : BOB HFLIP 4 : BOB HFLIP 6
WHILE x > 20
  x = x - 2
  frame = (frame + 1) MOD 3
  IF frame = 0 THEN BOB MOVE 0, x, 100
  IF frame = 1 THEN BOB MOVE 2, x, 100
  IF frame = 2 THEN BOB MOVE 4, x, 100
  BOB FLIP
WEND
BOB MOVE 6, x, 100
BOB FLIP

Fim: GOTO Fim

WAIT apenas aguarda o próximo quadro: nunca troca páginas, mesmo com BOB PAGEFLIP ON. Use BOB FLIP para apresentar os BOBs desenhados na página escondida. Ele já aguarda o próximo VBLANK, portanto não precisa de um WAIT adicional; usar ambos acrescenta outra espera. O menu Sample traz o exemplo completo BOB: carro ida e volta (MSX 2), com os pixels do carro e dimensões 32×16.

ATENÇÃO

Largura e altura iguais às do desenho

Os rótulos acima estão vazios: cole no lugar as linhas DB exportadas pelo Studio. Os números do BOB CREATE precisam ser os mesmos do desenho. Cada linha DB com 16 bytes é uma figura de 32 pixels de largura (2 pixels por byte); com 16 linhas, use BOB CREATE 0, Nrun1, 32, 16. Declarar 16×16 para um desenho 32×16 mostra a figura embaralhada.

7. Big BOBs: chefes e naves gigantes

BOB CREATEBIG registra uma figura grande em SCREEN 5, no MSX 2 ou superior. O desenho inteiro fica em um único bloco de dados; não é preciso dividi-lo em sprites nem criar cada pedaço separadamente.

Dimensões e slots realmente aceitos

LarguraAlturas aceitasSlots consecutivos reservadosÚltimo slot raiz possível
32 pixels32 ou 64 pixels17
64 pixels32 ou 64 pixels26
96 pixels32 ou 64 pixels35
128 pixels32 ou 64 pixels44

Por exemplo, BOB CREATEBIG 0, NaveGrande, 64, 32 usa os slots 0 e 1, mas você movimenta a figura inteira com BOB MOVE 0, x, y. O slot 1 é reservado internamente: não crie outro BOB nele. O compilador rejeita dimensões literais fora da tabela e combinações que ultrapassam o slot 7; uma raiz ímpar não é, por si só, inválida.

Passo a passo no MSX2 STUDIO

  1. Na IDE, com um projeto aberto (crie um se Graphics pedir), abra Graphics → MSX2 STUDIO. Para uma imagem que você já criou, selecione-a na lista Assets e confira as dimensões. Ela precisa ser um object, não uma page: páginas são cenários carregados por PAGELOAD, não padrões BOB.
  2. Para começar um desenho novo, clique em + Obj (New object). Informe largura 64 e altura 32 nas duas perguntas. Embora o Studio permita outras medidas para desenho, CREATEBIG só aceita as medidas da tabela acima.
  3. No campo de nome da lista Assets, escreva NaveGrande. Use um nome começando por letra, sem espaços ou acentos. Esse nome será o rótulo dos dados e deverá ser o mesmo usado no comando.
  4. Desenhe a nave com o pincel, linhas, retângulo ou preenchimento e as cores da paleta. Deixe a cor 0 nas partes transparentes; use a cor 1 para preto opaco. Se importar uma imagem do PC, no importador escolha object, tamanho 64×32 e apenas uma peça (sem recortar em vários objetos).
  5. Com o objeto selecionado, clique em Export CSX. Em Format, escolha ASM DB. Para este primeiro teste, não escolha ARRAY nem MegaROM ASCII8.
  6. Deixe Include BOB CREATE marcado e coloque Slot = 0. A caixa mantém esse nome mesmo para figuras grandes, mas o texto gerado deve terminar em BOB CREATEBIG 0, NaveGrande, 64, 32.
  7. Se usou paleta personalizada, marque Prefix PALETTE. Copie também esse trecho e execute-o depois de SCREEN 5, antes de mostrar a figura. Com a paleta padrão, ele não é necessário.
  8. Clique em Copy. No Programa 20.3 abaixo, substitua todo o trecho entre os comentários “Inicio dos dados…” e “Fim dos dados…” pelo texto copiado. Isso inclui ASM, NaveGrande:, todas as linhas DB, END ASM e o BOB CREATEBIG final. Não cole apenas o nome ou o comando; não deixe os dados antigos nem duplique a criação. Send to CSX editor insere o trecho no início do código, não no ponto indicado: mova-o para depois de SCREEN 5, no lugar dos dados antigos. O botão não cria o programa de movimento.
  9. Mantenha o restante do programa e clique em Run. A IDE seleciona uma máquina MSX 2 ao reconhecer USES SCREEN 5. A nave vai para a direita e fica parada, sem deixar rastros.

O que são os dados DB?

SCREEN 5 guarda dois pixels em cada byte. A cor do pixel esquerdo ocupa os quatro bits altos; a do direito, os quatro bits baixos. Por exemplo, 255 ($FF) representa dois pixels de cor 15; 0 representa dois pixels transparentes.

Uma figura 64×32 precisa de 64 × 32 ÷ 2 = 1.024 bytes. O Studio quebra a exportação em linhas de 16 bytes, portanto gera 64 linhas DB: duas linhas DB por linha horizontal de 64 pixels. Uma linha DB não significa necessariamente uma linha do desenho. Copie tudo na ordem exportada, incluindo os zeros; não reorganize em tiles, não acrescente cabeçalho de arquivo .SC5 e não use dados compactados de PAGELOAD.

DIGITE E VEJA

Programa 20.3 — Nave grande completa, pronta para rodar

Este exemplo já inclui os 1.024 bytes de uma nave 64×32. Você pode rodá-lo primeiro, sem usar o Studio, e depois substituir o trecho indicado pelo seu próprio desenho.

USES SCREEN 5, BOBS
SCREEN 5
COLOR 15, 1, 1
CLS

' Inicio dos dados exportados pelo Studio
' Object "NaveGrande" 64x32  pixels=2048B  packed=1024B
ASM
NaveGrande:
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 119, 119, 119, 119, 136, 136, 136, 136, 119, 119, 119, 119, 119, 119
  DB 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 0, 0, 119, 119, 119, 119, 119, 119, 119, 119, 119, 85, 85, 85, 85, 85
  DB 85, 85, 85, 85, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 0, 0, 119, 119, 119, 119, 119, 119, 119, 119, 119, 85, 85, 85, 85, 85
  DB 85, 85, 85, 85, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 170, 170
  DB 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 85, 68, 68, 68, 68
  DB 68, 68, 85, 85, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 0
  DB 0, 0, 119, 119, 119, 119, 119, 119, 119, 119, 119, 85, 85, 85, 85, 85
  DB 85, 85, 85, 85, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 0, 0, 119, 119, 119, 119, 119, 119, 119, 119, 119, 85, 85, 85, 85, 85
  DB 85, 85, 85, 85, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 0, 0, 119, 119, 119, 119, 136, 136, 136, 136, 119, 119, 119, 119, 119, 119
  DB 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 136, 136, 136, 136, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255
  DB 255, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
  DB 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
END ASM
BOB CREATEBIG 0, NaveGrande, 64, 32
' Fim dos dados exportados pelo Studio

BOB PAGEFLIP ON
DIM x AS BYTE = 16
WHILE x < 176
  BOB MOVE 0, x, 88
  BOB FLIP
  x = x + 2
WEND
BOB MOVE 0, 176, 88
BOB FLIP
WHILE 1
  WAIT
WEND

Por que cada trecho está aqui?

  • USES SCREEN 5, BOBS declara os recursos; SCREEN 5 realmente entra no modo gráfico. A diretiva sozinha não muda a tela.
  • ASM … END ASM guarda os bytes da figura sob o rótulo NaveGrande:. Os dados não são instruções para desenhar: CREATEBIG os copia para a área de padrões na VRAM.
  • BOB CREATEBIG 0, NaveGrande, 64, 32 registra uma vez a figura inteira e reserva os slots 0 e 1.
  • BOB PAGEFLIP ON prepara duas páginas com o mesmo fundo. BOB MOVE 0, x, 88 desenha a nave na página escondida; BOB FLIP apresenta essa página no próximo quadro. Não chame BOB SYNC junto com BOB FLIP.
  • O último BOB MOVE + BOB FLIP mostra a posição final. Só então o laço com WAIT mantém o programa vivo sem trocar páginas: WAIT não substitui a apresentação.

ATENÇÃO

Sua figura tem outro tamanho ou nome?

Se for 64×64, são 2.048 bytes (128 linhas DB de 16 bytes); se for 128×64, são 4.096 bytes (256 linhas DB). Use o tamanho e o nome que o Studio exportou no CREATEBIG. Para 128 pixels de largura, reduza o limite de x para 128 ou menos, para a figura caber inteira na tela. Se mudar o slot raiz, mude também todos os BOB MOVE do programa.

Se nada aparecer ou a figura sair embaralhada

  • Só há NaveGrande: sem DB? Faltam os pixels; copie o bloco completo do Studio.
  • Saiu PAGELOAD em vez de CREATEBIG? Você exportou uma page. Importe/crie um object com as dimensões desejadas.
  • Aparece erro de largura ou altura? Escolha uma combinação da tabela. Uma imagem 64×16 ou 48×32 pode ser desenhada no Studio, mas não é uma dimensão válida para CREATEBIG.
  • Fica invisível com pageflip ligado? Termine o movimento com BOB FLIP, não apenas WAIT.
  • Fica embaralhada? Nome, dimensões, quantidade e ordem dos bytes devem corresponder à exportação; duas linhas DB formam uma linha do desenho 64×32.
  • As cores mudaram? Inclua a paleta personalizada depois de SCREEN 5; cor 0 é transparente.

ATENÇÃO

VRAM tem limite

Cada BOB reserva espaço para o padrão e para restaurar o fundo nas duas páginas. Essas áreas internas são compartilhadas e organizadas por slots; não coloque outros gráficos nelas nem reutilize slots reservados. Confira o Memory Layout Designer (capítulo 26) ao combinar figuras grandes e cenários.

8. Regras de ouro dos BOBs

  • Sempre USES SCREEN 5, BOBS (e KEYBOARD se ler input).
  • Slots de 0 a 7; BIG reserva largura ÷ 32 slots consecutivos, sem ultrapassar o 7.
  • Anime alternando slots, não redefinindo o mesmo slot a cada frame.
  • Ligue BOB PAGEFLIP ON antes do loop principal; termine cada iteração com BOB FLIP.
  • Para virar o personagem, BOB HFLIP em vez de exportar frames extras.
  • Se a tela ficar azul de repente, quase sempre é slot inválido, BOB maior que o declarado ou VRAM estourada — abra o Machine Inspector.

9. Resumo do capítulo

  • BOBs contornam os limites de sprite do V9938 com cor real e sem flicker.
  • CREATE/CREATEBIG, MOVE, ERASE, HFLIP cobrem 95% dos jogos.
  • BOB PAGEFLIP ON + BOB FLIP elimina o piscar; WAIT continua sendo apenas espera de quadro.
  • Slots são 8; reserve os vizinhos conforme a largura do BIG; anime por slot, não por redefinição.
  • Combinado com o Sprite Editor e o Graphics Studio, você monta cenário + personagem coloridos em minutos.

BOB SYNC

Na implementação atual, BOB SYNC chama a mesma rotina que BOB FLIP: espera as cópias pendentes e o próximo VBLANK; com BOB PAGEFLIP ON, também apresenta a página pronta e alterna a página de desenho. Portanto, não é apenas uma espera pelo blitter, nem deve ser chamado junto com BOB FLIP no mesmo quadro (isso causaria duas trocas). Só funciona em SCREEN 5. WAIT, por sua vez, apenas aguarda o próximo quadro e nunca troca páginas.

Comunidade

Discussão · BOBs: objetos animados por blitter

Curta, marque como lido e comente o que achou deste capítulo.

0 comentários
Entre para participar
Crie uma conta ou faça login para curtir, marcar como lido e comentar.

Carregando comentários…