Domanda

Sto implementando un piccolo gioco e sto avendo difficoltà a raggiungere la fisica funziona correttamente. In questo gioco, v'è una sfera (un cerchio che si muove da un fotogramma all'altro, e possono cambiare raggio) e diverse pareti (segmenti di linea che cambiano anche e si spostano da frame a frame). Posso rilevare collisioni correttamente, e rendendo la palla rimbalzare nella direzione corretta è problema.

difficoltà sorgono in situazioni in cui la sfera interseca una linea in un frame, quindi interseca nuovamente nella trama successiva, causando un doppio rimbalzo. Ho potuto spostare la palla indietro lungo la normale della linea fino a quando è in una posizione valida, ma questo provoca davvero strano comportamento quando la linea in questione sia colpito lungo il suo asse (immaginate una pallina da ping pong cadendo su uno stuzzicadenti montante e improvvisamente spostando da parte in modo che sia su un lato dello stuzzicadenti ...). Ci sono anche alcuni problemi quando la palla interseca più di una linea in un determinato lasso (immaginate quattro linee insieme facendo un rettangolo e la palla intersecante l'angolo di detto rettangolo) - quale direzione dovrebbe rimbalzare? In quale direzione si dovrebbe spostare?

Io in realtà non ho una domanda specifica, ma sono alla ricerca di consigli o qualche tutorial utili. Tutti quelli 2D sono riuscito a trovare finora solo intersezioni copertura rettangolo.

sto utilizzando XNA se fa alcuna differenza.

Grazie,
Cameron

È stato utile?

Soluzione

Questo è un problema universale per molte librerie di fisica. Se Google per "profondità di penetrazione" (insieme a "fisica", secondo me, o si potrebbe trovare qualcosa di completamente diverso: D). Troverete che anche queste librerie usano trucchi come la tua

Ci sono due soluzioni a questo:

L'uno a buon mercato è quello di aumentare la frequenza di aggiornamento. Spostare gli oggetti in 10 piccoli passi, invece di un unico grande e avrete meno di penetrazione, quindi fissandolo compensando la palla lontano dalla parete sarà meno visibile.

L'unica costoso è il rilevamento delle collisioni continuo. Ci sono algoritmi in grado di dire, dato un movimento e un oggetto fisso, il punto esatto nel tempo sia la volontà si intersecano. Google "sfera spazzato rettangolo di intersezione" per trovare alcuni di questi.

È quindi possibile aggiornare in questo modo: palla ha bisogno di muoversi di 1,0 unità. Verificare la presenza di collisione. Collisione si verifica dopo 0,25 unità, in modo da spostare palla di 0,25 unità, calcolare la riflessione vettore (così la palla rimbalza dal muro), ripetere controllo di collisione con il restante 0,75 unità (fino a quando si conosce la posizione finale della palla). Questo evita penetrazioni interamente ed anche se la palla si muove così velocemente che sarebbe normalmente saltare il muro in un singolo aggiornamento, verranno rilevate la collisione.

Altri suggerimenti

E 'generalmente accettato che, a causa del passo temporale tuoi collisioni si intersecano passato un punto accettabile tra gli aggiornamenti.

In sostanza, si deve interpolare di nuovo al punto in tra l'ultima e la corrente fotogramma in cui la collisione veramente accaduto, spostare l'oggetto di nuovo a quel punto, e quindi calcolare le forze, ecc

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top