Quais são algumas boas abordagens para gerar processualmente um nível 2d infinito? O nível pode ser restrito em qualquer dimensão, mas não necessariamente.
A abordagem que mais faz sentido para mim até agora está usando um raio baseado em grade. por exemplo, divida a área de jogo em uma grade com quadrados de um determinado tamanho e carregue X quadrados em um raio ao redor do jogador. Então, quando o jogador se mover para outro quadrado, construa o próximo conjunto e desça mais (a área explorada persistente não é necessária.) Quando um quadrado é construído, ele contém um arranjo aleatório de objetos. Quando os objetos deixam o anel externo dos quadrados, eles são removidos do mundo. Existem maneiras melhores ou diferentes? Ou, se essa é uma boa abordagem, quais são os possíveis problemas?
Por uma questão de discussão, você pode pensar no nível como um campo de asteróides de cima para baixo, com power-ups, etc. espalhados por todo o lado.
fonte
Respostas:
Um problema com mundos "infinitos" é que suas coordenadas subjacentes podem não ser infinitas. Às vezes, se o jogo atrasar o jogador o suficiente, pode não ser uma preocupação, porque o tempo para atingir o número inteiro, por exemplo, seria muito longo para ser alcançado. Porém, se você permitir grandes diferenças de velocidade, pode ser preciso e muito abrangente, que você precise pensar em suas coordenadas. Uma correção razoável seria ter dois níveis, como as coordenadas inteiras da sua grade e coordenadas flutuantes em cada referencial da grade.
Como um aparte, você pode até conseguir manter o layout do seu mundo adequadamente, usando as coordenadas da grade como uma semente para criar seu mundo aleatório em um determinado quadrado. Assim, quando o jogador sai da área, você pode soltá-la e, quando o jogador voltar, poderá regenerá-la novamente a partir da semente.
fonte
float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos;
Na minha máquina, diff é 0.