2D platform AABB problemi di collisione
Ho un problema con una risoluzione di collisione AABB.
Risolvo l'intersezione AABB risolvendo prima l'asse X, poi l'asse Y. Questo viene fatto per evitare che questo bug: http://i.stack.imgur.com/NLg4j.png
L'attuale metodo funziona bene quando un oggetto si muove nel lettore e il giocatore deve essere spinto in senso orizzontale. Come puoi vedere nel file .gif, i picchi orizzontali spingono il giocatore correttamente.
Quando i picchi verticali si spostano nel lettore, tuttavia, l'asse X viene comunque risolto per primo. Questo rende "impossibile usare le punte come un ascensore".
Quando il giocatore si muove verso le punte verticali (colpite dalla gravità, cade su di esse), viene spinto sull'asse Y, poiché all'inizio non c'era alcuna sovrapposizione sull'asse X.
Una cosa che ho provato è stato il metodo descritto nel first answer of this link. Tuttavia, i picchi e gli oggetti in movimento si spostano cambiando la loro posizione, non la velocità, e non calcoliamo la loro prossima posizione prevista finché non viene chiamato il loro metodo Update(). Inutile dire che questa soluzione non ha funzionato neanche. :(
Ho bisogno di risolvere AABB di collisione in un modo che entrambi i casi sopra descritti il lavoro come previsto
Questo è il mio codice sorgente di collisione corrente:. http://pastebin.com/MiCi3nA1
Sarei Davvero grato se qualcuno potesse esaminare questo, dal momento che questo bug è stato presente nel motore fin dall'inizio, e ho faticato a trovare una buona soluzione, senza alcun successo. al codice di collisione e impedendomi di arrivare alla "parte divertente" e codificando la logica di gioco :(
Ho provato ad implementare lo stesso sistema di collisione della demo del platformer XNA AppHub (incollando la maggior parte delle cose). Tuttavia il bug "saltante" si verifica nel mio gioco, mentre non si verifica nella demo di AppHub. [salto bug: http://i.stack.imgur.com/NLg4j.png]
Per saltare controllo se il lettore è "onGround", quindi aggiungi -5 a Velocity.Y.
Poiché Velocity.X del lettore è più alto di Velocity.Y (fare riferimento al quarto pannello nel diagramma), onGround è impostato su true quando non dovrebbe essere, e quindi consente al giocatore di saltare a mezz'aria.
Credo che questo non accada nella demo di AppHub perché Velocity.X del lettore non sarà mai più alto di Velocity.Y, ma potrei sbagliarmi.
Ho risolto prima risolvendo prima l'asse X, quindi sull'asse Y. Ma questo rovina la collisione con le punte come ho detto sopra.
FYI Ecco la stessa domanda su gamedev.stackexchange.com - ha più risposte: http://gamedev.stackexchange.com/questions/14486/2d-platformer-aabb-collision-problems?lq=1 – LearnCocos2D