Como podem ser criados jogos de tal forma que tenham níveis infinitos como o Temple Run? Que conceitos são usados neles?
Na maioria dos jogos, um humano, em algum momento, especificou onde tudo vai em um nível, e criou cada um deles. Em alguns outros, em vez disso, escrevemos um algoritmo para criar os níveis para nós. Alguns destes estão numa área pré-definida, e funcionam como um nível feito à mão, embora talvez com menos inspiração e menos novidade. Outros podem gerar mais dele na mosca, que é o que a pergunta é sobre.
Existem algumas técnicas que funcionam bem para uma área fixa mas não para um nível infinito, então eu ganhei't discuti-las aqui.
Eu classificaria níveis infinitos em 2 categorias amplas; linear e aberta.
Linear é simples, e temple run cai nessa categoria. Você está't criando um mundo, mas também uma série de obstáculos ou desafios para o jogador lidar. Isto pode ser muito simples; você tem um conjunto de coisas que o jogador pode encontrar, sejam obstáculos, inimigos, power-ups, pick-ups, etc. Você então os escolhe aleatoriamente e os coloca no mundo à medida que o jogador avança.
Para tornar as coisas mais interessantes, as probabilidades destas coisas podem mudar com o tempo. No início, os inimigos podem ser escassos e os power-ups frequentes, mas à medida que você vai, os power-ups se tornam mais escassos, e há mais inimigos, inimigos mais duros, obstáculos mais difíceis, etc. Isto cria uma curva de dificuldade para o jogo.
Você também pode construir padrões mais sofisticados; você pode dar lulls na dificuldade para deixar o jogador recuperar o fôlego, ou atirar mais alongamentos, variando um pouco as coisas para torná-lo mais interessante. Você pode usar padrões para criar uma estrutura melhor do que coisas aleatórias, como correntes de moedas, ou uma corrente de moedas que segue um caminho através dos obstáculos, ou talvez um bom power-up em um lugar arriscado. Você poderia decidir que alguns aspectos funcionariam bem em um padrão mais regular, por exemplo, quedas de saúde espaçadas de forma mais uniforme. É também uma boa ideia verificar se os obstáculos gerados são resolúveis; se existe um caminho através daquele won't kill you, por exemplo.
Open-ende requer técnicas mais sofisticadas. Você geralmente quer que o mundo seja consistente se você retornar a uma área antiga, e é realmente mais sobre criar um mundo do que uma cadeia de obstáculos.
Um método é usar uma função de ruído, como por exemplo o ruído perlin. Estes são padrões que são aleatórios, mas têm uma estrutura para eles, e podem ser computados em um ponto sem conhecer outros pontos. Por exemplo, você poderia usar isso para gerar o mapa de altura do mundo, e isso definiria como suas colinas funcionam. Sempre que você estivesse no mesmo ponto, o terreno seria da mesma altura, e geraria suavemente, e sempre que você retornasse a uma área antiga, ele se igualaria perfeitamente.
alguns jogos têm uma abordagem que apenas irá gerar a mesma área de forma consistente todas as vezes, o que poupa espaço de armazenamento, enquanto outros irão armazenar o que foi gerado e usar métodos como os acima referidos para garantir que a geração será consistente consigo mesma.
Plantar detalhes dentro do mundo pode funcionar de forma semelhante; você pode criar um mapa de ruído que lhe diz a densidade de árvores em uma área, e usar isso para descobrir quantas árvores você deve desovar, ou quantos inimigos, ou rochas, ou quaisquer outros detalhes que você precisa.
Existem também técnicas para gerar uma estrutura. Uma abordagem é construir a estrutura em uma grade; você coloca várias salas em um determinado nível e depois adiciona corredores para encadeá-las juntas. Outra abordagem subdivide a área em salas, tornando-a muito mais densa.
Artigos semelhantes
- Existem alguns tutoriais para construir um jogo como o Temple Run usando o motor de jogo Unity3D, ou qualquer outro motor de jogo?
- Como é um documento de design de jogo para o Temple Run?
- Qual é a diferença entre o esquema de 3 níveis e 5 níveis?
- Quais são alguns jogos simples que podem ser criados em C/C++ para iniciantes?