Come fare un platform basato sulla gravità

2

C'e' stato parecchio interesse su come io abbia creato le meccaniche della gravità in AirScape. Così ho deciso di scrivere il mio primo tutorial su come l'ho realizzato e mostrare quanto sia realmente semplice.

La prima cosa da dire è che il metodo è stato concepito da yann Granjon. L'idea non è stata mia, l'ho semplicemente implementata. Lui mi ha aiutato parecchio durante la produzione del gioco e non sarebbe stato lo stesso senza di lui.

Le basi

La cosa piu' importante da considerare per questo lavoro è l'abilità del behaviour Platfmor di cambiare gli angoli di gravità. Una volta che sappiamo che questo funziona, la cosa importante da considerare è: come saprà il gioco quale direzione della gravità settare a quale punto?

Così Yann ha suggerito le zone di gravità, ed io le ho implementate.

(Scusate per la cattiva qualità delle immagini, sembra che abbiano perso qualità durante l'upload).

Qui potete vedere una panoramica del livello 1-1. Le cose principali alle quali siamo interessati sono le zone colorate che circondano le masse di terra.

Queste forme sono tutti frames dello stesso oggetto, 'gravzone'. Ci sono circa 5 forme, tutte per scopi diversi.

Ci sono due tipi di gravzone, "Relative" e "Non-Relative". Questo è deciso semplicemente da un booleano.

Il codice

Il codice è molto semplice. Queste sono le basi:

Fondamentalmente, c'è un angolo per ogni 'gravzone'. Questo angolo è determinato dal fatto che la gravzone sia relativa o meno.

Generalmente, le 'gravzones' tondeggianti sono relative, mentre quelle dritte non lo sono. La differenza è che le gravzones relative attraggono verso un singolo punto, che permette la superficie tondeggiante, mentre le gravzones non tondeggianti attraggono verso un angolo specifico (questo angolo è generalmente specificato dall'angolo della gravzone).

Comunque, torniamo al codice. Tutto quello che fa è determinare l'angolo corretto per ogni zona che il giocatore sta oltrepassando (l'angolo è determinato da gravzone.a per le non relative o angle(player.x, player.y, gravzone.x, gravzone.y) per le relative) e poi trasformare questo angolo in due vettori. Fa questo in manera che i vettori possano essere sommati ai vettori precedenti e si finisca con avere un vettore che punti nella direzione media degli angoli specificati da tutte le gravzones sulle quali il giocatore sta passando in quel momento.

In questa maniera posso sovrapporre due o più gravzone, e quindi tirare verso la media dei loro angoli.

Flipping 180

Qui arriva un piccolo problema quando si fa un'inversione di 180 gradi. Fondamentalmente, la media degli angoli viene cancellata ed il giocatore cade in direzioni strane. Per questo, ho integrato un altro oggetto invisbile, il flip_assist

Questo sovrascrive la tradizionale programmazione della gravita mentre il giocatore sta passando sopra il flip_assist

Questo codice fondamentalmente cambia l'angolo di gravità standard per un angolo di gravità settato manualmente dal flip_assist, e quindi lo fa tornare al normale quando il giocatore non sta piu' passando sopra uno di quelli.

Ci sono due flip_assist per ogni barra gialla che vedete, quindi il giocatore può ruotare avanti e indietro. Questo implica la necessità del booleano 'cannot_reset_flip' in maniera che il gioco non si confonda.

E quindi ci siamo. Con un po' di gestione dell'angolo:

Abbiamo le meccaniche base del gioco.

Qui ci sono alcuni esempi di livelli per avere un'idea migliore

Spero che vi sia piaciuto il tutorial. Fatemi sapere se mi sono dimenticato qualcosa!

  • 1 Comments

  • Order by
Want to leave a comment? Login or Register an account!