Quali sono i calcoli alla base del laser viola "Raiden 2"?


15

Il percorso del laser è influenzato dall'input dell'utente e dai nemici presenti sullo schermo. Ecco un video, alle 5:00 viene mostrato il laser in questione: Raiden II (PS) - 1 Loop Clear - Parte 2

AGGIORNARE

Ecco un test usando Inkscape, la nave è in fondo, i primi 4 nemici sono presi di mira dal plasma. Sembra che ci sia una sorta di modello. Ho spostato prima la nave, quindi la maniglia da essa per formare un angolo di 45 °, quindi mentre cercavo di adattarmi alla curva ho trovato uno schema di maniglie parallele e ho continuato così fino a raggiungere l'ultimo nemico. inserisci qui la descrizione dell'immagine

Aggiornamento, 26/05/2012 : ho avviato un progetto XNA utilizzando Beziers, c'è ancora del lavoro necessario, aggiornerò la domanda la prossima settimana. Rimanete sintonizzati !

inserisci qui la descrizione dell'immagine

Aggiornamento: 30/05/2012 : Sembra davvero che stiano usando le curve di Bézier, penso che sarò in grado di replicare / imitare un plasma di tale grado. Sono stati scoperti due nuovi argomenti dall'ultima volta: lunghezza dell'arco , fenomeno di Runge , il primo dovrebbe aiutare ad avere un movimento lineare possibile su una curva di Bézier, il secondo dovrebbe aiutare a ottimizzare il numero di vertici. La prossima volta inserirò un video in modo da poter vedere l'avanzamento Cool


2
Bene, è una spline di qualche tipo. Forse curva di Bézier . Non sono sicuro che questa domanda sia rispondibile da chiunque che non sia gli sviluppatori originali. Se stai cercando di ricreare questo effetto, dovresti mostrarci quello che hai e dirci che cosa non funziona.
MichaelHouse

2
Non ne ho idea, ma ha una bella dose di radicale.
Hackworth,

1
Avendo interpretato una malsana quantità di Raiden, ho i miei dubbi sul fatto che il dentifricio sia una sorta di curva a forma chiusa. Sembrava sempre mantenere una buona quantità di memoria. Ho il sospetto che stia eseguendo una sorta di percorso con un raggio di sterzata obbligatorio.

@ Byte56: gli sviluppatori / i fan di Shmup sono dedicati, sarei sorpreso se questo non è documentato / invertito da qualche parte ormai.

3
Sembra che posiziona i segmenti uno alla volta uscendo dalla nave, con una curva massima, e ogni segmento si gira verso i nemici se ce ne sono vicini o nella direzione del movimento della nave.
Kevin Reid,

Risposte:


6

Ho appena creato qualcosa che potrebbe aiutarti. È stato in risposta per aiutare qualcuno nei forum GLBasic.

Ecco il link al forum con il mio suggerimento: Random Textured Rolling Hills

Questo è scritto in GLBasic, ma ho cercato di renderlo di facile lettura, quindi dovrebbe essere facilmente convertito in qualsiasi lingua.

Per utilizzarlo per le tue esigenze, dovrai generare i tuoi dati / punti spline. Sostituisci i punti 'hill' nel mio esempio con i tuoi punti spline. Avresti solo bisogno di aggiungere un effetto di animazione / sfarfallio in qualche modo. Forse un cambiamento di trama casuale.

La vera "magia" accade nella mia funzione "AddPoint":

FUNCTION AddPoint: h AS THillPoint
    DIMPUSH self.points[], h

    // Is this the very first data point?
    IF LEN(self.points[]) = 1
        self.points[0].pu.Set(0, self.points[0].pm.y - self.texture_ht_up)
        self.points[0].pd.Set(0, self.points[0].pm.y + self.texture_ht_dn)
        RETURN
    ENDIF

    ALIAS h0 AS self.points[-2]  // Reference to the 2nd last point
    ALIAS h1 AS self.points[-1]  // Reference to the last point
    LOCAL angle#
    LOCAL v1 AS TVector
    LOCAL v0 AS TVector

    // Calculate 'p2' of HillPoint - form rectangle with previous point
    angle = ATAN(h1.pm.y - h0.pm.y, h1.pm.x - h0.pm.x)  -90// Angle of the two points

    v1.x = COS(angle) * self.texture_ht_up + h1.pm.x
    v1.y = SIN(angle) * self.texture_ht_up + h1.pm.y
    v0.x = COS(angle) * self.texture_ht_up + h0.pm.x
    v0.y = SIN(angle) * self.texture_ht_up + h0.pm.y
    h0.pu = h0.pu.AverageWith(v0)
    h1.pu.Copy(v1)

    v1.x = COS(angle) * -self.texture_ht_dn + h1.pm.x
    v1.y = SIN(angle) * -self.texture_ht_dn + h1.pm.y
    v0.x = COS(angle) * -self.texture_ht_dn + h0.pm.x
    v0.y = SIN(angle) * -self.texture_ht_dn + h0.pm.y
    h0.pd = h0.pd.AverageWith(v0)
    h1.pd.Copy(v1)
ENDFUNCTION

Qui è dove calcolo i quad / poligoni finali che tracciano lo sprite lungo la linea.

Ecco i risultati finali: inserisci qui la descrizione dell'immagine

E con il wireframe dei poligoni acceso: inserisci qui la descrizione dell'immagine


1
Fantastico lo guarderò. A proposito, il link che hai dato è rotto.
Aybe,

3
Il collegamento non sembra essere rotto per me ...
doppelgreener

Ho appena controllato il collegamento casuale a Rolling Hills strutturato in questo momento, mi porta un errore 404.
Aybe,

1
Strano. Funziona ancora per me. Ma ecco il link sottostante: glbasic.com/forum/index.php?topic=8118
Doug.McFarlane

Rotto per me, ho provato la home page, mostra "Funziona!" e questo è tutto ... strano.
Aybe,
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.