Design de rolagem de tela no estilo Mega Man

25

A série Mega Man clássica do NES usa uma técnica de rolagem muito específica que estou tendo dificuldade em implementar. Essencialmente, o nível é dividido em "telas", todas do mesmo tamanho. Algumas das telas rolam suavemente , criando a ilusão de campos mais amplos de jogo. Algumas telas impedem a rolagem da câmera até que o player atinja a borda da tela, momento em que ocorre uma transição e a próxima tela é exibida. Também é possível que uma única tela tenha mais de uma transição, por exemplo, possui uma escada que sobe para uma tela, mas você também pode avançar para outra tela.

Como essas transições de tela podem ser modeladas?

Diagrama de transição da tela Mega Man

  • Tela 0 é a tela inicial, onde o player inicia.
  • A tela 0-3 é rolada horizontalmente e aparece para o jogador como um campo contínuo de jogo.
  • Como existe uma transição entre a Tela 3 e as telas 4 e 5 vizinhas, a câmera não avançará além das bordas direita ou superior da Tela 3, a menos que o player se mova para a borda respectiva e "avance" para a próxima tela.
  • Depois que o player se move para uma das extremidades da transição, a entrada do usuário é momentaneamente desabilitada e a câmera passa para a nova área, após a qual a entrada do usuário é restaurada.

  • A tela azul (Tela 5) desativou a rolagem horizontal, de modo que somente as transições verticais são possíveis.

  • A tela verde (Tela 6) tem uma transição vertical de volta para a Tela 5, mas também permite a rolagem horizontal suave na Tela 7.

Edit : A implementação das transições em termos de salas me leva a isso:

Diagrama de implementação da estrutura da sala

Os pequenos entalhes com uma seta são as regiões nas quais uma transição pode ocorrer. Cada região tem um "sentido" e mentiras apenas fora da área visível da sala. Assim que o jogador atingir uma região, uma transição será iniciada.

Zack The Human
fonte
11
esse comportamento também está presente nos jogos 2D da série Metroid.
Sparr
Sim, é essencialmente o mesmo. A diferença é que o IIRC Metroid permitiu a rolagem suave vertical em algumas salas / eixos, enquanto o Mega Man nunca teve a rolagem suave vertical; sempre houve uma transição.
Zack The Human
Eu ouvi isso chamado 'triagem de filme'.
Blecki

Respostas:

21

Parece que o que você precisa é o conceito de quartos, em vez de telas . As telas 1 a 3 seriam uma sala, por exemplo, suas salas poderiam ter qualquer tamanho e forma, ou mesmo restringir-se ao tamanho de múltiplos de uma tela .

Sua câmera seguiria o reprodutor por uma determinada sala, até que ele se aproximasse demais da borda (metade da largura da tela). Quando o jogador se move através da borda e entra em outra sala, você executa a visualização de transição.

Cada sala teria um conjunto de pontos de acesso, que são mapeados para pontos de acesso de outra sala - criando os pontos de transição.

TreDubZedd
fonte
Obrigado pela sugestão. Era isso que eu inicialmente queria fazer, mas encontrei um obstáculo mental ao tentar lidar com as transições. Digamos, por exemplo, que há uma sala comprida com uma entrada do topo no lado esquerdo da sala e uma saída no topo do lado direito. Suponho que a maneira de lidar com isso seria definir pequenas regiões que podem desencadear a transição, hum?
Zack The Human
Um pouco mais: o conceito de "sala" é o que tenho atualmente no meu jogo. Os quartos podem ter tamanho arbitrário, mas ainda não defini como fazer a transição de um quarto para outro.
Zack The Human
11
@Zack: A câmera segue o Player. Os limites da câmera nunca devem se sobrepor a uma sala fora daquela em que o Player está (por exemplo, se a borda direita da janela de exibição estiver contra a borda direita desta sala, a câmera não poderá se mover para a direita). Se o Player passar através de uma parede da sala para uma sala adjacente, faça com que a Câmera rastreie rapidamente até que ela esteja segura dentro da nova Sala (você só precisa se preocupar com cima / baixo / esquerda / direita em sua estrutura para esse movimento). Opcionalmente, se o jogador caminhar até a parede da sala, assuma o controle automático e force-o a avançar para ficar completamente dentro da nova sala.
Doppelgreener
11
@ Zack: Sua edição de perguntas parece se correlacionar com o que eu estava pensando. A posição do jogador só pode sair de uma determinada sala nesses locais de transição (entre y1 e y2 em uma parede vertical ou x1 e x2 em uma parede horizontal) e, assim que for, você coloca sua posição na próxima sala - evitando assim um loop "para a frente e para trás" - e realize a transição visual.
TreDubZedd
11
Você também pode considerar uma "borda" ao redor de cada sala, que geralmente é uma área não reproduzível (exceto para as regiões de transição). Você pode projetar graficamente suas salas de forma que a borda não reproduzível sempre contenha gráficos de "parede", mas as regiões de transição permanecem abertas, como o restante da sala. Você pode fingir uma "sobreposição" de transição esperando o jogador atravessar completamente a borda (reproduzível) e, na próxima sala, verifique se a nova posição não cruza a borda.
TreDubZedd
-8

O conceito de grandes áreas de rolagem suave sendo compostas por pedaços do tamanho de tela é um artefato de severas limitações de recursos em consoles clássicos, onde os ganhos de desempenho podem ser obtidos mantendo os dados em pedaços de tamanhos específicos (como uma página de memória). Há muito poucas razões para usar esse sistema em um jogo moderno.

Sparr
fonte
7
Entendo que os desenvolvedores originais tiveram que implementar a rolagem dessa maneira para carregar blocos, sprites etc. Não preciso implementar o sistema baseado em tela descrito na minha pergunta. O que realmente quero é emular a câmera e / ou movimento de rolagem.
Zack The Human
4
-1 - A divisão da área de jogo em blocos descontínuos pode não ser mais relevante para o carregamento, mas ainda cria um sentimento particular de lugar para os jogadores e os ajuda a mapear a área mentalmente.
@ Joe, como isso é relevante para a minha resposta? Dirijo especificamente e diretamente os pedaços de tamanho de tela múltipla. Eu não disse nada sobre os pedaços serem descontínuos ou não.
Sparr
Eu queria que você soubesse que não diminuiu a votação da sua resposta, mas realmente não acho que ela responda à minha pergunta: 'Como essas transições de tela podem ser modeladas?'.
Zack The Human
@Zack obrigado. se for muito mais negativo, vou excluí-lo, mas, se permanecer em -3, deixarei, pois acho que é pertinente, mesmo que não seja uma resposta direta.
Sparr