Come posso far stare un personaggio sui pendii?


8

Prima di tutto, nota che voglio capire il principio, quindi preferirei le spiegazioni in un inglese semplice (ma ovviamente non ho nulla contro un codice per integrare queste spiegazioni).

Mi chiedo quale sia il modo di fare in modo che un personaggio passi correttamente su un pendio, iniziamo con due schermate del gioco Limbo per mostrarti cosa intendo: Personaggio principale del Limbo in piedi su un pendio Personaggio principale del Limbo in piedi su un terreno pianeggiante
Quindi, come puoi vedere in queste immagini, sembra la spina dorsale del il personaggio è in realtà perpendicolare all'orizzonte e non alla superficie del terreno e questa osservazione mi porta alla mia domanda:
come puoi riprodurre un simile comportamento con Sprite Kit? Perché se collego un corpo fisico a un nodo, ho la possibilità di farlo ruotare, quindi otterrei qualcosa del genere: Possiamo vedere che lo sprite segue il terreno su cui si trova, quindi i piedi del personaggio sono sul pavimento ma la sua spina dorsale non è perpendicolare all'orizzonte ma più al suolo

Se disabilito la rotazione, otterrei qualcosa di più simile a questo: Qui la colonna vertebrale è perpendicolare all'orizzonte ma i piedi del personaggio non toccano il pavimento.  In effetti c'è solo un angolo dello sprite che tocca il pavimento
come puoi vedere, questi modi di fare entrambi presentano problemi importanti e non sembrano affatto naturali. Quindi come devo fare per renderlo naturale?Ho pensato di creare diversi sprite e diversi corpi fisici e poi collegarli tutti insieme alle articolazioni Non penso che sembrerà naturale perché se guardi questo: inserisci qui la descrizione dell'immagine
se posso collegare fisicamente questi nodi, come farò per farli sembra reale graficamente? Perché nella realtà, ad esempio, la coscia e il polpaccio sono collegati da un ginocchio ...

Qualche idea ?


1
Prova a salire su un pendio e guarda come va. Quando metti una gamba di fronte all'altra, la gamba più in alto deve piegarsi per compensare la pendenza. Quindi il tuo approccio con giunti multipli è una buona opzione.
Eejin,

@Eejin Ok grazie, e che dire del realismo grafico a livello delle articolazioni? Cosa posso fare per collegarli naturalmente? Per non far sembrare che ci siano diversi nodi?
Trevör,

Dipende da alcuni aspetti del tuo gioco. Chiaramente le parti del corpo ben disegnate aiutano. Potresti dare qualche informazione in più sulle dimensioni e quanto sia importante il dettaglio perfetto?
Eejin,

Se la tua terra è sempre, diciamo, erba alta, usare solo il punto più basso dello sprite potrebbe andare bene poiché le gambe dei personaggi saranno oscurate al punto in cui non puoi dire come stessero.
jzx,

Non conosco SpriteKit, ma molti giochi rappresentano il giocatore come una "capsula" o una "pillola" piuttosto che un rettangolo. Inoltre, l'oggetto fisico è generalmente più piccolo dello sprite stesso.
Thane Brimhall,

Risposte:


6

Per espandere la risposta di Josh Petrie, anche trovare l'angolazione del piede è piuttosto semplice.

inserisci qui la descrizione dell'immagine

L'angolo dei piedi è uguale all'angolo della superficie inclinata. Poiché abbiamo convenientemente due punti su quella pendenza, possiamo trovare l'angolo di inclinazione (è anche possibile utilizzare due angoli della forma triangolare della pendenza, ma le pendenze graduali diventerebbero troppo complicate; per le dolci colline, questa è la soluzione migliore). Alla fine la pendenza sarà H / P (supponendo che il tallone della gamba piegata sia direttamente sotto l'anca corrispondente), o arctan (H / P) rad. Usando i coseni, si può facilmente trovare che H = (F + T) - (Fcosθ + Tcosφ).

L'angolo del piede diventa arctan ((F (1-cosθ) + T (1-cosφ)) / P)

PS: se vuoi entrare DAVVERO, potresti anche trovare la larghezza aggiunta a P.

PSS: il piede si piegherà solo molto in alto, quindi tienilo a mente prima di provare a scalare una pendenza di 80 gradi.

PSSS: le persone non scalano le colline alle calcagna, ma si riposano su di esse. Mantenere il piede perfettamente piatto su per la collina potrebbe in qualche modo rappresentare con precisione il giocatore in piedi sulle punte dei piedi e consentire al tallone di affondare a terra mentre il minimo può rendere alcuni movimenti molto realistici.


5

Ci sono soluzioni e trucchi semplici che puoi usare (ad esempio, se le tue pendenze saranno tutte ad angolo fisso, crea solo sprite aggiuntive per il movimento inclinato e inattivo, fornisci un meccanismo per il tuo codice di gioco per sapere se sei su una superficie inclinata e render di conseguenza - questo è di solito ciò che facevano i vecchi giochi basati su sprite).

Una soluzione generale, che si espande sulla tua idea di sprite multi-articolata, è quella di utilizzare la cinematica inversa per risolvere il posizionamento dei piedi di un personaggio ( vedi anche ).

Ciò comporta la definizione di una struttura scheletrica logica per i tuoi personaggi, rappresentata visivamente da diversi sprite distinti (per il busto, tutte le parti delle gambe di cui hai bisogno e il piede). L'effettore finale in questo sistema è la posizione del piede del personaggio sulla pendenza, che può essere calcolata dalla posizione (fissa) del busto e un'idea di quale piede si trova davanti, in base all'attuale telaio del ciclo di camminata. Tra queste due posizioni note, un sistema IK può risolvere i parametri delle articolazioni delle gambe e creare una ragionevole approssimazione di come qualsiasi vero bipede potrebbe stabilizzarsi su una superficie inclinata.

IK viene spesso espresso come un problema 3D, ma può essere ridotto relativamente facilmente allo spazio 2D. In 2D non è necessario andare in giro con quasi tutti i vincoli di rotazione articolare per creare movimenti realistici come in 3D, il che è bello.

Questo è il metodo usato da molti moderni giochi 2D, soprattutto vista la tendenza delle composizioni sprite a base scheletrica per i personaggi, piuttosto che la tecnica più antica di creare a mano ogni fotogramma.

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.