Sto verificando la collisione per un personaggio platform come mostrato in # 1. I punti rossi sono i pixel che vengono controllati e le linee grigie indicano gli assi a cui appartengono. Mi piacciono i risultati che ottengo controllando la collisione in questo modo (rispetto, diciamo, riquadro di selezione). Tutto funziona esattamente come mi piacerebbe tranne un problema: il rilevamento della schiacciamento.
Nelle immagini seguenti, il riquadro azzurro rappresenta il terreno, il riquadro arancione è un oggetto e le frecce indicano la direzione del movimento.
La semplice soluzione per rilevare quando il giocatore è schiacciato è vedere se i punti di collisione sui lati opposti stanno entrambi innescando. Se lo sono, il giocatore viene schiacciato. Nel # 2, puoi vedere uno scenario normale di schiacciamento. Il giocatore è messo a terra e i punti di collisione più alti si intersecano con l'oggetto che cade. Questo innesca una cotta.
# 3, 4 e 5 presentano scenari problematici. Nel # 3, il giocatore si sta muovendo verso l'oggetto, che si sta muovendo verso l'alto. Un punto di collisione sul lato destro sta colpendo l'oggetto, causando una collisione e fermando il giocatore.
Ora, se l'oggetto continua a spostarsi verso l'alto e il giocatore continua a muoversi a destra (come mostrato in # 4), l'oggetto cancella il punto di collisione del lato destro del giocatore e il giocatore si sposta a destra. Ma ora, dopo averlo fatto, l'oggetto sta intersecando un punto di collisione superiore causando una compressione verticale indesiderata.
Uno scenario simile è mostrato in # 5. Due oggetti sono abbastanza distanti da consentire la cancellazione dei punti di collisione inferiori, consentendo al giocatore di cadere, ma no fino al punto di consentire ai punti di collisione laterali di liberarsi, causando una schiacciata orizzontale indesiderata.
Mi sono scervellato per trovare una soluzione, ma nulla di ciò che ho escogitato ha funzionato particolarmente bene, quindi mi chiedo se qualcuno là fuori abbia un'idea o un'idea su come risolvere questi problemi.
Per chiarire un po 'di confusione, i punti di collisione rossi sarebbero all'interno dello sprite e le linee grigie sarebbero state utilizzate solo per indicare l'asse pertinente per ciascun punto di collisione. Ad esempio, se lo sprite del personaggio fosse un semplice quadrato verde, i punti di collisione sarebbero simili a questo: