Far muovere un personaggio lungo un pendio curvo in un mondo con gravità


10

Ho visto questo gioco

Pantaloni fantasia 2 . E la cosa che ho notato a parte la fisica e le belle animazioni è che il personaggio si sta muovendo lungo pendii, persino pendii curvi. Ho poca esperienza in Box2d, ma questo concetto di pendenze curve è nuovo per me. Sarebbe di grande aiuto per me se qualcuno mi illuminasse su questo concetto e sulla sua attuazione. Anche se l'implementazione non è in box2d, è il benvenuto.


2
Metanet, i ragazzi che hanno fatto N (che è in Flash) hanno un tutorial su come hanno fatto le collisioni che coprono il modo in cui calcolano le curve: metanetsoftware.com/technique/tutorialA.html
CodexArcanum

Risposte:


5

Come si ottengono le curve in Box2D?

Nella versione inedita di Box2D , ci sono due nuovi tipi di forma, b2LoopShape e b2EdgeShape , che consentono di creare curve da una sequenza di segmenti di linea.

Nella versione rilasciata, è possibile utilizzare più caselle disposte ad angolo per ottenere un effetto simile, ma i corpi hanno la tendenza a fare cose instabili e inaspettate vicino ai punti di connessione. Quindi consiglierei di usare la versione inedita.

Come può un personaggio cadere lungo la curva?

Trasforma il personaggio in una ruota! La mia domanda sulla fisica dei platform ha delle discussioni su questo , ma l'idea di base è montare il corpo del tuo personaggio su una ruota rotante e muoverla applicando forza rotazionale alla ruota. Anche se (in realtà, perché) la ruota ha attrito, la forza verso il basso dalla gravità le farà ruotare in discesa - come una ruota reale. Modificando i parametri del motore del giunto rotante, è possibile farlo resistere alla rotazione quanto è necessario per evitare che si inclini verso il basso su piccole pendenze.


Sono d'accordo con te, usando b2LoopShape ho potuto creare una pendenza come il mio desiderio. Ma, seguendo il link che hai pubblicato; Il problema è che non porta a una porta flash di box2d solo una versione c ++. 1.) Hai qualche suggerimento per questo? o 2.) Conosci qualche altro motore fisico per il flash che consenta la creazione di pendenze curve?
Vishnu,

Non credo che la porta Flash di Box2D sia aggiornata con i nuovi tipi di giunti / forme. Non ho idea di quali motori fisici siano disponibili per Flash diversi da Box2D.

@ Joe: se ti chiedo, se sarebbe possibile se provassi a scrivere una classe AS per b2LoopShape? In modo da poterlo incorporare nell'API Flash Box2d. Da dove dovrei iniziare la rotta? Qualche idea?
Vishnu,

1

Fancy Pants è stato realizzato in Flash e Flash ha un metodo specifico chiamato "hitTest" che ti consente di testare un pixel (in questo caso, probabilmente esegue test Hit di 2-3 pixel lungo la parte inferiore del carattere Fancy Pants) contro qualsiasi cosa sia disegnata all'interno di un oggetto filmato designato. Può essere un po 'complicato farlo sentire bene, ma questa funzione integrata è il motivo per cui così tanti giochi Flash hanno collisioni con pendenze curve. Il processo è molto più complicato per la maggior parte degli altri motori e di solito deve essere eseguito manualmente, ma esistono diversi metodi.

Il metodo con cui ho più familiarità è se il tuo motore è basato su tessere (pensa Sonic the Hedgehog), le tessere designate come curve potrebbero avere ciascuna una formula che determina la posizione di collisione 'Y' in base all'attuale posizione 'X' del personaggio su quella piastrella. Dovresti determinare la formula in base alla pendenza del pendio e alla curva che stai cercando. È possibile utilizzare un calcolatore grafico o un programma grafico per sperimentare le formule. Puoi avere più tessere con curve e formule diverse associate ad esse in questo modo.


Sonic non ha una formula curva per le tessere. Usa una mappa di altezza 2d per ogni pixel.
AttackingHobo

@AttackingHobo: puoi dirmi cos'è la mappa 2dheight per ogni pixel o puoi indicarmi un posto dove posso usarlo per i miei giochi flash?
Vishnu,

2
info.sonicretro.org/Sonic_Physics_Guide Dai un'occhiata a questo. Non so se questo ti aiuterà se usi la casella 2d. Potrebbe essere necessario avviare il proprio motore fisico.
Attaccando

@Attacking Hobo: C'è qualche vantaggio o possibilità nel "fare" pendenze curve Se provo a creare una classe AS 3.0 che consenta loop in api box2d?
Vishnu,
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.