Gioco di elicotteri 2D, come creare muri di corridoi?


12

Sto cercando di adattare il classico gioco "elicottero" (ad es. Http://www.addictinggames.com/helicopter.html ), ma non ho ancora capito come creare il motore di generazione dei muri.

Qualche puntatore nello pseudocodice? Non sono così interessato agli oggetti nel mezzo: solo la metodologia per generare i lati in un modo che aumenta con difficoltà (si chiude di più, ha curve più inaspettate) man mano che il gioco procede.


1
Inoltre, per chiarire, ho bisogno che i muri siano più sinuosi che blocchi, dato che in realtà saranno "onde d'acqua" ...
davidkomer,

1
basta fare come blocchi, ma interpolare uniformemente tra ciascuno di essi.
Gustavo Maciel,

Risposte:


17

Per questo potresti usare il rumore 1D Perlin . Ecco un'immagine del rumore 2D. Ho preso dei campioni dove si trova la linea rossa e li ho moltiplicati con una costante per ottenere la linea verde.

Rumore 2D con sezione 1D

La costante con cui moltiplichi i valori determinerà l'altezza del rumore. Quindi potresti facilmente aumentare la difficoltà. Un altro vantaggio del rumore Perlin è che può generare rumore piastrellabile, in modo da poter costruire un livello apparentemente infinito.

Se si desidera creare un fondo e un soffitto, è importante non generare aree impraticabili. Il modo più semplice sarebbe semplicemente quello di utilizzare la parte "superiore" del rumore (ad es. 1.0 - noiseValue) Come soffitto e la parte inferiore ( noiseValue) per il fondo (con qualche offset tra ovviamente). Se sembra troppo noioso, potresti anche prendere in considerazione due campioni ravvicinati, ad es. immagina un'altra linea di campionamento rossa con uno o due pixel in alto o in basso. Questo darà un'onda simile, ma non identica.


Caspita, questo è stato di grande aiuto! Grazie :) Sto sviluppando in Flash / Actionscript- e vedo che c'è una funzione perlinNoise integrata ... ci giocherà e vedrà come va :)
davidkomer,

@davidkomer Sono contento che sia utile. In flash dovrai creare un BitmapDataoggetto e usarne la perlinNoisefunzione. La bitmap può essere 800x3 pixel o qualcosa di estremo, quindi potresti semplicemente estrarre i valori della riga superiore e inferiore (qualcosa del genere (bitmap.getPixel(x,y) & 0xff) / 255.0dovrebbe darti valori 0..1nell'intervallo.
bummzack

Hmmm- L'ho fatto funzionare, ma la costante / moltiplicatore spinge i valori in aree impraticabili ... ecco il mio codice, qualche idea? (vect è un vettore di valori a 32 bit, campionato dalla linea del rumore perlin ... quindi y_val è solo il canale blu moltiplicato per lo scaler) per (idx = 0; idx <vect.length; idx ++) {y_val = (vect [idx] & 0xFF) * scaler; drawData.fillRect (new Rectangle (idx, drawData.height - y_val, 1, y_val), 0x0000ff); drawData.fillRect (new Rectangle (idx, 0, 1, y_val), 0x0000ff); }
davidkomer,

Devo correre per ora, ma qualcosa mi dice che ho solo bisogno di leggere i tuoi commenti con più attenzione;) Questo è dove sono
finora

Qual è il scaler? I valori ottenuti saranno compresi nell'intervallo 0..255nel tuo codice.
Bummzack,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.