2D-Hubschrauberspiel, wie man Korridorwände erstellt?

12

Ich bin gerade dabei, das klassische "Hubschrauber" -Spiel anzupassen (dh http://www.addictinggames.com/helicopter.html ), aber ich habe noch nicht herausgefunden, wie die Walls-Generation-Engine erstellt werden kann.

Irgendwelche Hinweise auf den Pseudocode? Die Objekte in der Mitte interessieren mich nicht so sehr - nur die Methode zur Erzeugung der Seiten in einer Weise, die im Verlauf des Spiels mit zunehmender Schwierigkeit zunimmt (enger wird, unerwartetere Kurven aufweist).

Davidkomer
quelle
1
Zur Klarstellung muss die Wand kurviger als blockig sein, da es sich tatsächlich um "Wasserwellen" handelt ...
davidkomer
1
tun Sie einfach als Blöcke, aber interpolieren Sie zwischen jedem dann glatt.
Gustavo Maciel

Antworten:

17

Sie könnten dafür 1D Perlin-Rauschen verwenden . Hier ist ein Bild von 2D-Rauschen. Ich habe Proben mit der roten Linie genommen und mit einer Konstanten multipliziert, um die grüne Linie zu erhalten.

2D-Rauschen mit 1D-Schnitt

Die Konstante, mit der Sie die Werte multiplizieren, bestimmt die Höhe des Rauschens. So können Sie die Schwierigkeit leicht erhöhen. Ein weiterer Vorteil von Perlin-Rauschen ist, dass es kachelbares Rauschen erzeugen kann, so dass Sie einen scheinbar endlosen Pegel erzeugen können.

Wenn Sie einen Boden und eine Decke erstellen möchten, ist es wichtig, dass Sie keine unpassierbaren Bereiche erzeugen. Der einfachste Weg wäre, einfach den "oberen" Teil des Geräusches (z. B. 1.0 - noiseValue) als Decke und den unteren Teil ( noiseValue) für den Boden zu verwenden (natürlich mit etwas Versatz dazwischen). Wenn Ihnen das zu langweilig erscheint, können Sie auch zwei nahe Beispiele in Betracht ziehen, z. Stellen Sie sich eine weitere rote Abtastzeile mit ein oder zwei Pixeln nach oben oder unten vor. Dies ergibt eine ähnliche, aber nicht identische Welle.

Blödmann
quelle
Wow, das war so eine Hilfe! Danke :) Ich entwickle in Flash / Actionscript- und ich sehe, dass es eine eingebaute PerlinNoise-Funktion gibt ... werde damit spielen und sehen, wie es geht :)
Davidkomer
@davidkomer Ich bin froh, dass dies nützlich ist. In Flash müssen Sie ein BitmapDataObjekt erstellen und seine perlinNoiseFunktion verwenden. Die Bitmap kann 800x3 Pixel oder etwas Extremes sein, dann können Sie einfach die oberen und unteren Zeilenwerte extrahieren (so etwas (bitmap.getPixel(x,y) & 0xff) / 255.0sollte Ihnen Werte im 0..1Bereich geben.
Bummzack
Hmmm- Ich habe es zum Laufen gebracht, aber die Konstante / der Multiplikator drückt die Werte in unpassierbare Bereiche ... hier ist mein Code, irgendwelche Ideen? (vect ist ein Vektor von 32-Bit-Werten, der aus der Linie des Perlin-Rauschens abgetastet wird ... also ist y_val nur der mit dem Skalierer multiplizierte blaue Kanal) für (idx = 0; idx <vect.length; idx ++) {y_val = (vect [idx] & 0xFF) * Scaler; drawData.fillRect (neues Rechteck (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (neues Rechteck (idx, 0, 1, y_val), 0x0000ff); }
Davidkomer
Ich muß für jetzt - laufen , aber etwas sagt mir , dass ich nur Ihre Kommentare mehr sorgfältig lesen müssen;) Dies ist , wo ich bin so weit pastebin.com/1tmMtEAh
davidkomer
Was ist das scaler? Die Werte, die Sie erhalten, liegen im Bereich 0..255Ihres Codes.
Mistzack