Rilevamento di collisioni di corda 2D


13

Voglio creare una corda che possa scontrarsi con oggetti come nel seguente video di YouTube:

Corda di fisica del gioco 2D

Sto pensando di implementare l'integrazione del verlet che utilizza i punti e collega questi punti con le linee. Sto cercando di capire quale tipo di rilevamento delle collisioni applicheresti alla fune per ottenere l'effetto nel video.

Sto pensando che dovresti fare qualche cd per ogni punto. Vorrei usare box2D, quindi mi chiedo che renderebbe ogni punto un corpo rigido funzionante? Tutto il consiglio sarebbe apprezzato.


1
Se guardi attentamente il video nel tuo link, è chiaro che la "corda" da simulare è in realtà una catena, cioè un gran numero di segmenti non flessibili collegati in una linea, piuttosto che una primitiva continuamente flessibile. Ciò è più evidente quando la corda avvolge il piccolo ostacolo rotondo; puoi vedere gli angoli che ruotano attorno ad esso. Una catena è molto, molto più facile da simulare di una corda continua; ogni collegamento è solo una primitiva di collisione e sono permanentemente collegati tra loro. Per un comportamento più convincente, rendere ogni collegamento una molla molto rigida piuttosto che totalmente inflessibile.
Paul Z,

Risposte:


6

Dal momento che stai usando Box2D, puoi creare una serie di rettangoli e usare i giunti di Box2D per unirli. Ecco la tua corda.

Per evitare che gli angoli spuntino da una corda piegata, posso immaginare due opzioni:

  1. Dai alle estremità arrotondate dei segmenti di corda (in modo che non siano più rettangoli)
  2. Rendi invisibile questa corda e usala solo per la fisica. Prendere le posizioni delle articolazioni in ogni fotogramma e l'uso che per disegnare una corda al volo che il giocatore sarà vedere.

Avvertenza: non ho mai provato questo da solo, ma non riesco a vedere come una serie di rettangoli uniti possa fallire quando il video che hai pubblicato mostra praticamente la stessa cosa sotto mentite spoglie.

Modifica: ho appena visto PaulZ e ho realizzato la stessa cosa. Vai a leggere anche il suo commento sulla domanda.


2

Un rapido Google lo ha lanciato qui . Una demo, descrizione e codice (in Flash) usando Box2D per implementare una semplice corda. La corda si scontra con se stessa e il blocco nella parte superiore della scena.


0

Ecco cosa farei, rendere ogni punto della linea un cerchio, fare abbastanza punti che i cerchi si sovrappongano. Lega ogni punto al suo vicino, piuttosto che una collisione standard questo legame dovrebbe far sì che i punti rimangano a una distanza fissa l'uno dall'altro.

Non conosco Box2D, ma immagino che la funzionalità richiesta sia lì.


0

Originariamente Box2D aveva una demo del ponte di corda fatta di scatole sottili unite con vincoli punto-punto; sarebbe un buon punto di partenza (non so se sarà ancora distribuito con quella demo, ma sarebbe semplice ricrearlo).

È abbastanza facile implementare la corda come particelle con vincoli di distanza indipendentemente da un simulatore di corpi rigidi (come dici tu, usando uno schema di integrazione Verlet e risoluzione dei vincoli come quello descritto in questo articolo: http://www.gamasutra.com/resource_guide/ 20030121 / jacobson_pfv.htm ), ma se vuoi che corpi rigidi reagiscano alla tua corda (come nel video, con la scatola penzolante), diventa molto più complicato. Vorrei iniziare con una suite completa di strumenti come Box2D e lavorare all'indietro piuttosto che provare a costruire dalle particelle.


0

Ricordo questo gioco Allegro: Cupido , da SpeedHack 2002. Contiene un'implementazione per le corde che si scontrano con lo scenario. Vedi le classi PhysParticles e HeartTrails nel file heart_tails.cpp nel suo codice sorgente .

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.