Domanda

Sono in procinto di fare il mio motore 2D per un Beat'em Up gioco (Castle Crashers è quello che io chiamo Beat'em Up o Brawler tipo di gioco).

sosterrò sprite 2D e emettitori di particelle 2D. Tutto questo è fatto nel motore ora. Ma io sono venuto a una questione che vorrei chiedere un consiglio:

Si tratta di gestione "spazio", quello che ho pensato è stato quello di fare qualcosa di questa immagine mostra:

alt text http://img337.imageshack.us/img337/9162/spacingprototype1 .png

La mia idea è di fare una griglia (Hash spaziale o Grid), della terra dove i miei emettitori di particelle / sprite 2D vivranno. Nella mia immagine, ho enumerato questa slot da 1 a N, (non c'è bisogno di essere 35, è solo per mostrare scopi). La mia idea è quella di disegnare le "GameElements" (Sprites / Emettitori) al fine da 0 a N, (che va dal secchio 0 a benna N), così poi mi metterò loro di visualizzare correttamente sovrapposti sullo schermo (di nuovo a trasmettere).

So che questo potrebbe essere fatto solo confrontando l'asse Y inferiore di ogni elemento e l'esecuzione di un "Quicksort" troppo, ma avere la griglia potrebbe permettermi di esibisco Collision Detection in un modo migliore, e se faccio qualcosa come un * per implementare un qualche tipo di intelligenza artificiale, potrebbe aiutarmi anche.

È stato utile?

Soluzione

Se si vuole avere una sorta di ottimizzazione per il numero di oggetti che è necessario testare uno contro l'altro, si potrebbe desiderare di pensare di utilizzare un Quadtree http://en.wikipedia.org/wiki/Quadtree

L'idea è quella di dividere lo schermo in alto a 4 nodi, mettendo tutti gli elementi nel nodo di appartenenza, poi dividere i nodi che avete appena creato in un altro 4 se ci sono sprites / items / qualunque cosa in là che devono essere testati . Continuare a fare questo fino a quando è stata raggiunta una certa dimensione o quantità di oggetti in un nodo.

Si può quindi chiedere al top-node se contiene l'elemento che si desidera verificare. Questo nodo sarà poi chiedere al bambino-nodi se contiene l'elemento, che a loro volta saranno chiedere ai loro figli. In questo modo una gran parte dello schermo può essere saltato già (se è situato a 00 bambini, è possibile saltare bambino 01, 10 e 11). Quindi si ottiene un elenco di elementi che si esegue un rilevamento più preciso collisione quando è desiderato di farlo.

Se si dovesse rendere visiva, sarebbe sembrare un po 'come questo:

alt testo http: // geodata.ethz.ch/geovite/tutorials/L2GeodataStructuresAndDataModels/en/images/quadtree.gif

Altri suggerimenti

Fuoco fuori al buffer Z e lasciare che la preoccupazione su di esso.

Se si scopre che in futuro è troppo lento (tramite profiling ovviamente) poi guardare ottimizzazione.

Prendere la soluzione più semplice e andare avanti.

Il tuo metodo non riesce se si dispone di due sprite che occupano la stessa casella nella griglia. Supponiamo di avere due nemici sia in piedi nella stessa scatola. Uno si trova un po 'di fronte all'altro. Che si disegna prima? Si avrebbe bisogno di due algoritmi -. Uno che divide gli sprite nella griglia, e il secondo, che guarda le z coordinate di tutti gli sprite in un dato scatola di griglia e attira loro sulla base di quel valore

Un metodo molto più semplice è quello di avere un unico insieme di tutti gli sprite. Dovrebbe archiviare tutti gli sprite Weaver loro z coordinate (dal retro dello schermo, a capo della lista per la parte anteriore dello schermo sul retro). Loop attraverso la raccolta e disegnare ogni sprite come appare. Quando uno sprite sposta all'interno o all'esterno dello schermo (es. I suoi cambiamenti coordinata Z) è possibile eseguire una semplice sorta spostare quel singolo sprite all'interno dell'insieme. Mantenere scambiandolo con il prossimo sprite nella lista fino coordinata Z del prossimo sprite è superiore / inferiore (a seconda dei casi) del mutato sprite di coordinate.

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