Em um jogo 2D de rolagem, os objetos devem se mover ou a câmera?

8

Eu sou novo em design de jogos e realmente não sei como as coisas são feitas. Estou pensando em construir um jogo para iOS em que um navio tenha que voar o mais alto possível (em velocidades variáveis), coletando power-ups, etc., a caminho.

Qual é o caminho a percorrer aqui? O fundo e os itens devem rolar para baixo a partir do topo ou o navio deve realmente voar para cima movendo a vista com ele?

Thomas
fonte
A única resposta correta é 'ambos'.
Blecki

Respostas:

6

É tudo relativo. Realmente, você está sempre transformando sua visão em relação à sua posição fixa no jogador.

Então, esquecendo a tela por enquanto, digamos que você tenha essas 3 etapas (representando as posições conforme atualizadas em cada loop do jogo):

  1. playerWorldPosition = 50, 100; objectWorldPosition = 60, 200;
  2. playerWorldPosition = 55, 110; objectWorldPosition = 60, 160;
  3. playerWorldPosition = 60, 120; objectWorldPosition = 60, 120;

(como x, y em cada caso)

Como você pode ver, o jogador está voando ou pulando e se movendo levemente para a direita, enquanto o objeto (pode ser um powerup) está caindo diretamente. O jogador pega o poder. Agora, como você desenha essa tela?

Primeiro, vamos supor que você queira o seu player no centro da tela o tempo todo. Portanto, a visualização é bloqueada para o player - essa é a abordagem mais simples de visualizar. A posição do seu jogador será sempre screenCentre(ie screenWidth/2, screenHeight/2). Como você consegue a posição na tela de outros objetos no mundo?

objectScreenPosition = (objectWorldPosition - playerWorldPosition) + screenCentre;

Você pode ver que essa fórmula funciona mesmo para o jogador real, pois (playerWorldPosition- playerWorldPosition) + screenCentreé igual a screenCentre. Portanto, você pode aplicar a mesma fórmula a cada entidade do seu jogo, percorrendo uma lista. Você pode usar essa abordagem simples para desenvolver outras coisas (como atraso na câmera, casos em que você está no canto de um nível etc.)

Engenheiro
fonte
E se houver zero ou muitos objetos de jogador? E se você quiser fazer efeitos especiais, como trepidação da câmera? Mesmo que a matemática pareça a mesma, na verdade não é a mesma coisa. E não é um ou outro. Os objetos se movem e a câmera também se move.
Blecki
11
@ Blecki ... Você diz, depois que a resposta foi aceita. Se você realmente acha que elas são tão diferentes, deve ter dificuldade em configurar suas visualizações. Escreva sua própria resposta concisa sobre as transformações de exibição que tratam de todos os casos de canto. Ninguém está parando você.
Engenheiro de
Você tem uma câmera, ela tem uma posição, você cria uma matriz de visualização. Não há estante de esquina.
Blecki 25/10/11
11
@ Blecki Agora você está se contradizendo. "E se você quiser fazer efeitos especiais, como trepidação da câmera?"
Engenheiro
11
@Blecki. Corrigir. Ainda bem que estamos de acordo.
Engenheiro