Estou pensando em adaptar o clássico jogo de "helicóptero" (por exemplo, http://www.addictinggames.com/helicopter.html ), mas ainda não descobri como criar o mecanismo de geração de paredes.
Algum ponteiro para o pseudocódigo? Eu não estou tão interessado nos objetos no meio - apenas a metodologia para gerar os lados de uma maneira que aumenta com dificuldade (fecha mais, tem curvas mais inesperadas) à medida que o jogo avança.
2d
mathematics
algorithm
davidkomer
fonte
fonte
Respostas:
Você pode usar o ruído 1D Perlin para isso. Aqui está uma imagem do ruído 2D. Tirei amostras onde a linha vermelha está e multipliquei-as com alguma constante para obter a linha verde.
A constante com a qual você multiplica os valores determina a altura do ruído. Então você pode facilmente aumentar a dificuldade. Outro benefício do ruído Perlin é que ele pode gerar ruído inclinável, para que você possa construir um nível aparentemente interminável.
Se você deseja criar um fundo e um teto, é importante que você não gere nenhuma área intransitável. A maneira mais fácil seria simplesmente usar a parte "superior" do ruído (por exemplo
1.0 - noiseValue
) como teto e a parte inferior (noiseValue
) na parte inferior (com algum deslocamento entre, é claro). Se isso parecer muito chato, você também pode considerar duas amostras próximas, por exemplo. imagine outra linha de amostra vermelha de um ou dois pixels para cima ou para baixo. Isso dará uma onda semelhante, mas não idêntica.fonte
BitmapData
objeto e usar suaperlinNoise
função. O bitmap pode ser 800x3 pixels ou algo extremo, então você pode simplesmente extrair os valores top e bottom line (algo como(bitmap.getPixel(x,y) & 0xff) / 255.0
deve dar-lhe valores no0..1
intervalo.scaler
? Os valores que você obtém estarão no intervalo do0..255
seu código.