Devo mudar o mundo ou mover o jogador?

11

Estou prestes a começar a desenvolver um jogo de rolagem lateral, onde o objetivo do jogador é viajar o mais longe que puder no eixo horizontal antes de pousar. Note que eu nunca preciso voltar ao eixo horizontal.

Estou desenvolvendo isso com o AndEngine para Android, que usa OpenGL e Box2d.

Antes de começar, preciso decidir algo importante: devo usar o mundo ao redor do jogador para simular movimento ou realmente mover o jogador e segui-lo com os recursos da câmera do mecanismo de jogo?

Ambas as abordagens parecem ter diferentes pontos fortes e fracos, então não sei qual é considerada a melhor. Por exemplo, o que tornaria mais fácil adicionar power-ups ao longo do caminho e ter um bom plano de fundo animado?

Obrigado!

monoceres
fonte
2
Mova a câmera.
Jonathan Dickinson
1
A menos que você tenha um motivo específico para não querer usar a câmera (que já foi escrita para você), mova o player e a câmera. Adicionar "power-ups" não deve ser afetado de nenhuma maneira.
Christopher Horenstein

Respostas:

9

Mova a câmera (conectada ao seu aparelho). Eu imagino que seu mundo tenha vários objetos, como inimigos. Se você seguisse movendo o mundo, teria que percorrer todos esses objetos para atualizar suas posições sempre que o mundo se movesse.

Se você mover o player e conectar a câmera ao player, haverá um uso mínimo de recursos. O jogo chegará à sua fase de renderização, percorrerá tudo de uma vez, como acontece em todos os quadros, e os desenhará na posição - camera.position. A posição da câmera sempre seria igual à posição dos seus jogadores nesse caso.

Suds
fonte
É claro que se os objetos forem inimigos, você não precisaria percorrê-los; basta adicionar o movimento dos mundos aos deles no método de atualização.
precisa saber é o seguinte
1
+1. Use camera.setChaseEntity(player);para conseguir isso.
MartinTeeVarga
6

Eu sempre movo a câmera e a recomendo - há muitas razões pelas quais prefiro isso, mas a mais significativa provavelmente se resume a isso:

  1. Se você mover a câmera e o player, são apenas duas entidades que precisam ser atualizadas para rolar a tela.

  2. Se você mover o mundo inteiro sempre que a tela precisar rolar, isso abrange um número desconhecido e possivelmente grande de entidades que precisarão ser atualizadas.

David Gouveia
fonte
Eu concordo, mas eu acrescentaria que simplesmente adicionar uma linha + = 'in o movimento do mundo à classe inimiga seria bastante trivial.
precisa saber é o seguinte
@AsherEinhorn Suponho que você esteja falando de um cenário como um gráfico de cena em que cada nó compartilha as transformações dos pais e simplesmente mover o nó raiz (ou seja, o "mundo") traduziria todo o resto automaticamente? Porque em todos os outros casos, mover o mundo implica mover tudo no mundo - que era o ponto do meu post.
David Gouveia
bem, se o movimento do mundo é inversamente proporcional ao jogador. ie - você avança, o mundo recua, então você pode apenas - = o movimento dos jogadores para todos os objetos do jogo. Concordo com você, só estou dizendo que existem maneiras triviais de fazer com que ambos funcionem.
precisa saber é o seguinte
4

É bastante trivial, na verdade, não faz diferença das coisas que você descreveu.

Você move o plano de fundo além da câmera e do player, ou move o player e a câmera com ele. Suponho que há menos uma coisa a fazer se você apenas mover o fundo.

Embora eu suponha que, se você mudar o plano de fundo, terá que criar os captadores e inimigos, o que novamente é trivial, mas é algo para se pensar.

Pessoalmente, eu mudaria o jogador porque eu só gosto de fazer coisas de uma maneira mais realista.

SirYakalot
fonte
0

Outras respostas são boas, mas eu gostaria de acrescentar alguns pontos do que é melhor, na esperança de ajudar alguém que tenta tomar a mesma decisão para um projeto diferente.

Movendo o Player:

  • É simples, todo o resto é estático (ish); portanto, em termos simplistas, a única coisa que você precisa fazer para mover o player é player.x += 5;(pseudocódigo).
  • "Clica melhor" para a maioria das pessoas. Quando você joga, sempre pensa que o jogador se move, e não o contrário. Portanto, é mais fácil pensar nisso como "O jogador deve se mover, não o mundo", o que, por sua vez, pode facilitar a organização de suas pessoas.
  • Fácil de rastrear onde o jogador está (sua posição também é suas coordenadas no mapa)

Movendo o mundo:

  • Se o seu jogo for grande o suficiente, você não precisa se preocupar com excesso / excesso, movendo-se muito longe do centro do mundo, pois a posição do jogador está sempre muito próxima 0.
  • Como acima, se você mexer com os cálculos 3D, não precisa se preocupar com resultados imprecisos com pontos flutuantes, porque tudo que você vê na tela deve estar bem próximo 0.
  • Se feito corretamente, você pode criar um mundo "infinito".
  • Tem que rastrear o jogador manualmente, a posição do jogador sempre será um valor pequeno, o que significa onde o jogador está na tela (tipo), para saber se o jogador está no canto superior esquerdo do mapa ou no canto inferior direito, você teria que acompanhar isso de alguma forma.

No final do dia, depende do projeto. Se alguém está criando um clone de Mario original, mover o mundo pode ser complicado, enquanto mover o jogador não cria muitos problemas. Porém, desejando fazer um grande jogo de mundo aberto, pode ser melhor mudar o mundo.

TomTsagk
fonte