Implementação de nível

7

Recentemente, comecei a criar um jogo sidescroller, para fins de aprendizado. Ao criar vários níveis para ele, me deparei com a questão de como implementar esses níveis no meu jogo. Eu fiz (e acho que essa é a maneira comum, me corrija se eu estiver errado, eu aprecio) um jogo baseado em estado, com um estado de menu, um estado de jogo e assim por diante. Então, qual é a maneira comum de implementar vários níveis no estado do jogo? Devo criar um novo estado para cada nível? ou o estado do jogo deve ser o único estado "jogável" e "sabe" (por mais que percebido) o nível atual em que está? Como você realizaria a contagem de pontos ou algo assim (como um sistema ativo ou um sistema simples de pontos com pontuação máxima)

Simiil
fonte

Respostas:

4

A implementação do conceito de nível varia bastante, mas duas técnicas comuns vêm à mente.

Na maioria dos jogos abertos, em que os níveis / progresso são apenas um estado interno do jogador, a implementação normal é fazer com que os recursos do jogo alcancem o estado do jogador (por isso, se o seu nível começa "nas docas", o jogo inicia. colocando você lá e começa a carregar.) O jogo espera até que todos os recursos terminem de carregar e depois muda para o estado "carregado".

A outra técnica comum é fazer com que o nível seja mais explícito. O nível a ser carregado ainda vem das informações da sessão do jogador, mas você carrega o nível no jogo e coloca as entidades em seus pontos de partida. Essa é a norma para jogos que possuem níveis literais que são arenas para jogar. Salvar jogos para esses jogos de estilo tendem a salvar apenas a diferença das condições iniciais do nível.

Como você pode ver, nenhuma delas implica que você possui um estado de jogo por nível, apenas que o nível está reproduzindo informações da sessão do jogador ou os recursos são explicitamente carregados para o nível e o jogador é colocado dentro dele.

No seu side-scroller, isso pode ser considerado como a informação da sessão que contém o índice / ID do nível e, em seguida, carregar esse nível no jogo principal. Quando o índice de nível é alterado, você armazena todas as informações necessárias para viajar com você de um nível para o próximo, libera o nível atual e carrega o novo e, finalmente, cai no estado salvo.

Os pontos ou o progresso do jogo são normalmente gerenciados por meio de informações da sessão, que geralmente incluem suas vidas atuais, pontuação, tempo de jogo, mas não as informações intra-nível (como nível de saúde, velocidade, número de marcadores na tela). Essa separação é importante em jogos em que o nível nem sempre é mapeado para o local (jogos em que você revisita locais por exemplo), mas pode ajudar a simplificar seu pensamento, mesmo em jogos lineares.

Richard Fabian
fonte
2

Simplesmente, o estado do jogo pode carregar um índice para o nível atual. Você desejará um gatilho (uma função no mínimo) para quando o nível terminar, para que você possa descarregar o nível atual, atualizar o índice do nível atual, carregar o (novo) nível atual e começar a tocar.

Você pode criar outro estado para cada nível, mas normalmente é desnecessário. As diferenças de dados entre "front end" e "no jogo" não são as mesmas que as diferenças entre os níveis. Se você quisesse estado por nível, poderia ter outra máquina de estado no estado do jogo, a forma mais rudimentar disso é um índice que representa o nível atual. :)

traço-tom-bang
fonte