Jeu d'hélicoptère 2D, comment créer des murs de couloir?


12

Je cherche à adapter le jeu classique "hélicoptère" (ie http://www.addictinggames.com/helicopter.html ), mais je n'ai pas encore compris comment créer le moteur de génération de murs.

Des pointeurs dans le pseudocode? Je ne suis pas tellement intéressé par les objets du milieu - seulement la méthodologie pour générer les côtés d'une manière qui augmente avec difficulté (se ferme plus, a des courbes plus inattendues) au fur et à mesure que le jeu progresse.


1
Aussi - pour clarifier, j'ai besoin que les murs soient plus sinueux que polyédriques, car ils seront en fait des "vagues d'eau" ...
davidkomer

1
il suffit de faire comme des blocs, mais d'interpoler en douceur entre chacun alors.
Gustavo Maciel

Réponses:


17

Vous pouvez utiliser le bruit Perlin 1D pour cela. Voici une image de bruit 2D. J'ai pris des échantillons où se trouve la ligne rouge et je les ai multipliés avec une constante pour obtenir la ligne verte.

Bruit 2D avec section 1D

La constante avec laquelle vous multipliez les valeurs va déterminer la hauteur du bruit. Vous pouvez donc facilement augmenter la difficulté. Un autre avantage du bruit Perlin est qu'il peut générer un bruit mosaïque, de sorte que vous pouvez créer un niveau apparemment sans fin.

Si vous souhaitez créer un fond et un plafond, il est important de ne pas générer de zones infranchissables. La manière la plus simple serait simplement d'utiliser la partie "supérieure" du bruit (par exemple 1.0 - noiseValue) comme plafond et la partie inférieure ( noiseValue) pour le bas (avec un certain décalage entre les deux bien sûr). Si cela semble trop terne, vous pouvez également envisager deux échantillons proches, par exemple. imaginez une autre ligne d'échantillonnage rouge d'un ou deux pixels vers le haut ou vers le bas. Cela donnera une onde similaire, mais pas identique.


Wow, c'était une telle aide! Merci :) Je développe en Flash / Actionscript- et je vois qu'il y a une fonction perlinNoise intégrée ... va jouer avec et voir comment ça se passe :)
davidkomer

@davidkomer Je suis content que ce soit utile. En flash, vous devrez créer un BitmapDataobjet et utiliser sa perlinNoisefonction. Le bitmap peut être de 800x3 pixels ou quelque chose d'extrême, alors vous pouvez simplement extraire les valeurs de ligne supérieure et inférieure (quelque chose comme (bitmap.getPixel(x,y) & 0xff) / 255.0devrait vous donner des valeurs dans la 0..1plage.
bummzack

Hmmm- Je l'ai fait fonctionner, mais la constante / multiplicateur pousse les valeurs dans des zones infranchissables ... voici mon code, des idées? (vect est un vecteur de valeurs de 32 bits, échantillonné à partir de la ligne de bruit perlin ... donc y_val est juste le canal bleu multiplié par le scaler) pour (idx = 0; idx <vect.length; idx ++) {y_val = (vect [idx] & 0xFF) * scaler; drawData.fillRect (nouveau rectangle (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (nouveau rectangle (idx, 0, 1, y_val), 0x0000ff); }
davidkomer

Je dois courir pour l'instant - mais quelque chose me dit que je dois juste lire vos commentaires plus attentivement;) C'est où je suis jusqu'à
présent

C'est quoi scaler? Les valeurs que vous obtenez seront dans la plage de 0..255dans votre code.
bummzack
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.