Pergunta

Eu estou querendo saber sobre como o NES exibe seu gráfica muscular.Eu pesquisei coisas on-line e ler por ele, mas eu estou querendo saber sobre uma última coisa:Nametables.

Basicamente, o que eu li, cada bloco 8x8 em um NES tabela aponta para uma localização na tabela padrão, que contém a memória gráfica.Além disso, o nome também tem uma tabela de atributos que define uma determinada paleta de cores para cada bloco de 16x16.Eles estão ligados entre si como este:

(supondo 16 blocos de 8x8) O nome, com A B C D = ponteiros para dados sprite:

ABBB
CDCC
DDDD
DDDD

Tabela de atributo, com 1 2 3 = ponteiros para a paleta de cores de dados, com < referência de valor para a esquerda, ^ acima, e ' a esquerda e acima:

1<2<
^'^'
3<3<
^'^'

Assim, no exemplo acima, o bloco colorido como assim

1A 1B 2B 2B

1C 1D 2C 2C

3D 3D 3D 3D

3D 3D 3D 3D

Agora, se eu tiver isso em uma tela fixa - ele funciona muito bem!Porque o NES resolução é 256x240 pixels.Agora, como essas tabelas ajustadas para a rolagem?

Porque o Nome 0 pode rolar na Tabela 1, e se você manter a rolagem Tabela 0 será disposto ao redor novamente.Que eu recebo.Mas o que eu não entendo é como percorrer a tabela de atributo envolve bem.Pelo que eu li online, os blocos de 16x16 ele atribui atributos para que fará com que a cor distorções na borda azulejos da tela (como visto quando se desloca da esquerda para a direita e vice-versa, SMB3).

A preocupação que eu tenho é que eu entendo como rolar o nametables, mas como você rolar a tabela de atributo?Para intsance, se eu tiver um bloco verde no lado esquerdo da tela, mova o ecrã para a direita deve, em teoria, causa as peças para a direita, para ser verde bem até que eles se movem mais no quadro, para que eles vão reverter para as suas cores normais.

~~~~EDIT:Eu quero ressaltar que eu sei sobre o scanlines, X e Y.Este pensei que apenas passou pela minha mente.

Vamos dizer que eu estou no scanline Y de 10.Isso significa que eu estou a leitura de 10 valores na minha nametables, horizontalmente.Isto queria dizer que a minha primeira coluna está fora da tela, como ele só tem largura de pixel de 8.No entanto, o atributo de cor permanece, pois ele tem largura de 16.

Assumindo que o atributo de cor de toda a coluna é verde, eu estaria correto em assumir que para o usuário, o primeiro 6 pixels no lado esquerdo da tela seria de cor verde, e o mais à direita 10 na tela deve ser verde também?Então, eu estaria correto na minha suposição de que, de acordo com a tela, à esquerda?

Foi útil?

Solução

Esse site Tenho certeza de que você já está muito, muito familiarizado. Vou prefaciar isso dizendo que nunca consegui programar para o NES, mas sou muito experiente com todo o hardware Gameboy que já foi lançado e o NES compartilha muitos, ahh peculiaria com o GB/DMG. Eu vou apostar que você precisa fazer uma das poucas coisas:

  1. Não role a tabela de atributos. Certifique -se de que todos os seus níveis tenham blocos de cores semelhantes ao longo da direção que você está movendo. Eu acho que muitos jogos de primeira geração fizeram isso.

  2. Vá em frente e permita a rolagem limitada de atributos - apenas verifique se as áreas onde as alterações estão ocorrendo são parcialmente compartilhadas com cores ou o Sparce o suficiente para que a alteração não seja perceptível.

  3. Saia do seu antigo cronômetro Skool Atari 2600 e cronometrar uma gravação para registrar US $ 2006 no final da atualização do Hblank para obter a troca de cores necessárias, aguarde alguns tiques e depois reverte durante o período de retorno do hblank para que a borda esquerda da próxima A linha não é afetada. Tenho a sensação de que essa é a solução usada com mais frequência, mas sem um emulador e paciência realmente bons, será uma dor no traseiro. Ele também comerá um pouco o uso geral da CPU, pois você precisa esperar em interrupções em várias linhas de varredura para realizar seu efeito.

Eu gostaria de ter uma resposta mais concreta para você, mas, esperançosamente, isso ajuda um pouco. Obrigado a Deus, o GB/DMG tinha um sistema de rolagem um pouco mais avançado. :)

Outras dicas

Tanto Super Mario Bros.3 e Kirby Adventure apresentar coloração artefatos na borda da tela quando você rolar.Creio que ambos os jogos definir o bit que espaços em branco à esquerda de 8 pixels da tela, de modo 0-8 pixels serão afetados em qualquer um quadro.

Se eu me lembro corretamente, Kirby Adventure sempre tenta colocar a cor-glitched colunas no lado da tela que é deslocamento fora para torná-lo menos visível.Eu não acho que esses artefatos são evitáveis, sem ter de mudar para espelhamento vertical, que apresenta dificuldades de sua própria.

Isenção de responsabilidade:é como se cinco anos desde que eu escrevi a qualquer NES código.

Cada nametable possui sua própria tabela de atributos, portanto, não deve haver artefatos gráficos ao rolar de um nomeado para outro. O tipo de falha de cor a que você está se referindo é realmente apenas um problema se o seu jogo rolar vertical e horizontalmente. Você tem apenas dois nametáveis, portanto, rolar os dois lados exige que você canibalize a tela visível. Existem várias soluções para esse problema, um grande resumo que pode ser encontrado neste post NESDEV:

http://nesdev.parodius.com/bbs/viewtopic.php?p=58509#58509

Este site pode ser de ajuda.http://www.games4nintendo.com/nes/faq.php#4

(Pesquise "O que há com US $ 2005/2006?" E comece a ler em torno dessa área.)

Basicamente, parece que é impossível que o pixel seja perfeito, no entanto, esses serão os pedaços que você provavelmente precisará investigar.

Gostaria de poder ser mais ajuda.

Cada nametable tem sua própria tabela de atributos. Se você limitar o mundo do seu jogo a apenas duas telas, só precisará escrever os nametables e atribuir tabelas uma vez. A parte difícil ocorre quando você tenta tornar os mundos maiores que duas telas. O Super Mario Bros. 1 fez isso rolando para a direita, envolvendo conforme necessário e tornando a coluna de nível um de blocos por vez (16 pixels) pouco antes da coluna aparecer. Não sei como codificaria isso com eficiência (lembre -se de que você só tem um milissegundo de tempo vblank).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top