Mi pentirò di usare un sistema di rilevamento delle collisioni basato sul colore?


7

Ho appena iniziato a costruire il mio primo gioco con XNA (ho esperienza con C # ma non con i giochi).

Sto costruendo uno sparatutto 2d top down piuttosto semplice. Ho letto questo tutorial sull'uso di un sistema di collisione basato sul colore e mi è sembrato davvero interessante. http://www.xnadevelopment.com/tutorials/theroadnottaken/theroadnottaken.shtml

Significa che posso rapidamente raggiungere livelli semplicemente usando qualsiasi programma grafico e non devo definire il mio scenario (muri, alberi, ecc.) In termini di scatole di collisione ecc. Giusto?

Tuttavia, vedo che percorrere questo percorso significa che forse il calcolo per determinare se oggetti in rapido movimento come proiettili intersecano pareti ecc. Diventa potenzialmente più difficile perché non è possibile eseguire calcoli di tipo di intersezione della geometria di base.

È giusto? Mi dispiacerà andare in questa direzione se il mio gioco diventa più complesso nel tempo? Vale la pena investire nella creazione di un editor di livelli per definire il mio scenario in termini di geometria?

Qualche consiglio per un noob molto apprezzato!

Risposte:


6

Sei a posto con le tue osservazioni riguardo alle capacità di un approccio di collisione basato su bitmap.

Questo metodo fornisce un modo davvero semplice per modificare i livelli con qualsiasi programma in grado di generare una bitmap (qualsiasi programma di modifica delle immagini). Questo sistema è anche molto flessibile quando si desidera definire diversi tipi di terreno. Dire greenper fango e redper un solido sottosuolo. Quindi puoi facilmente interrogare il pixel corrente e determinare il tipo di metropolitana su cui si trova il giocatore. Anche rampe (pendenze da terra da A a B) sono possibili senza molti problemi.

Si verificano problemi con il rilevamento delle collisioni. È facile rilevare un'intersezione con un altro oggetto (basta fare un pixel test), ma è difficile (costoso dal punto di vista computazionale) scoprire quale orientamento ha l'oggetto con cui ti sei scontrato. Ciò è particolarmente importante quando è necessaria una superficie normale per deviare correttamente gli oggetti .

Anche oggetti in rapido movimento possono essere un problema, specialmente se hai oggetti sottili (ad es. Larghi 1 pixel) con cui scontrarti. C'è questa domanda che copre già questo argomento.

Alla fine tutto dipende dal tipo di gioco che si desidera creare e dalla risoluzione (in termini di rilevamento / risoluzione delle collisioni) necessaria. L'approccio basato su bitmap funziona al meglio, quando gran parte del tuo mondo è statico. Ma ti consente anche di implementare cose come livelli distruttibili abbastanza facilmente.

Dato che non hai menzionato il tipo di gioco che desideri creare, ora spetta a te decidere se un approccio di collisione basato su bitmap sarebbe utile per il tuo gioco. In bocca al lupo.


Nella mia esperienza, il problema della superficie normale è piuttosto banale rispetto alla determinazione effettiva dell'impulso angolare a seguito di un impatto, in un sistema di rilevamento delle collisioni perfetto per pixel. Generalmente il PPCD non viene utilizzato per i giochi che richiedono quel tipo di livello di dettaglio, probabilmente perché probabilmente rende le cose molto più difficili della fisica basata sui vettori, a questo proposito. L'altro problema che ho riscontrato con questo approccio era la possibilità di rimanere "bloccato" quando ruotate il personaggio in determinate posizioni del vostro livello. Box2D e simili gestiscono ciò spingendo i centroidi a parte quando sono troppo vicini.
Ingegnere,

grazie mille! Non ho intenzione di fare alcuna deviazione, quindi penso che sia ok. Non ero sicuro di cosa fare con i proiettili che viaggiano veloci che potrebbero saltare le pareti in un unico fotogramma. Capire se hanno attraversato un muro sembra ok, basta prendere un campione dell'immagine della mappa in un rettangolo lungo e sottile che è il percorso dei proiettili e cercare i pixel colorati del muro. Ma capire il primo pixel del muro che avrebbe colpito sembra un po 'più difficile. Penso che quando il proiettile si innesca spara raycast e prendo un numero di pixel campione a brevi intervalli lungo il raggio alla ricerca del primo pixel del muro e segnalo come punto di impatto?
TerryB,

2
@TerryB: penso che l' algoritmo della linea Bresenham funzionerà bene qui. Disegna la linea fino a quando non colpisci un pixel del muro e quello sarà il tuo punto di collisione.
bummzack,
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.