2010-02-08 4 views
5

Ho un'idea di come voglio avvicinarmi a questo, ma non sono sicuro che sia l'ideale. Per evento intendo ad esempio, se il giocatore vince, un gruppo di scintille vola per 1 secondo. Stavo pensando di creare la mia classe di motore di gioco, quindi creare una classe base di eventi di gioco che abbia 3 funzioni void, aggiornamento, estrazione, rendering. Potrebbero esserci per esempio dei pompieri per la raccolta di 100 monete per 3 secondi. Il modo in cui voglio implementarlo è di avere un vettore di eventi nel mio motore di gioco in cui posso spingere l'animazione dei fuochi d'artificio dentro. Una volta che qualcosa è stato inserito nel vettore, il gioco fa l'evento [i] .render() ecc ... Per rimuovendolo pensavo che ogni evento potesse avere una lunghezza di evento in frame, e ogni frame un uint è aumentato, se l'uint corrisponde alla lunghezza, viene estratto dal vettore. Non ero sicuro che farlo in questo modo fosse il modo migliore.Come vengono gestite le lunghezze degli eventi di gioco in giochi 2D

Grazie

risposta

1

Vorrei che ogni istanza di evento avesse un metodo chiamato isDone o qualcosa del genere. Poi, per ogni fotogramma, scorrere i vostri eventi e:

if (event.isDone()) { 
    //remove the event 
} else { 
    event.update(); 
} 

Facendo in questo modo permette di modifiche più facile in futuro. Non tutti gli eventi dureranno per un periodo di tempo fisso (questo potrebbe non essere vero per il tuo gioco), alcuni potrebbero anche dipendere da cose diverse dal frame corrente.

Ma nei vostri eventBaseClass, si potrebbe definire come isDone:

return this.endFrame >= game.currentFrame; 

e sovrascrivere in tutti gli eventi che avete bisogno di.

+0

Mi piace molto questo! Grazie !, Ma l'aumento continuo del frame può portare a un overflow? – jmasterx

+1

Supponendo che un'architettura a 32 bit e 60 fotogrammi al secondo, sarebbe traboccare dopo 828,5 giorni: (2 ** 32)/60/60/60/24 – Ponkadoodle

+0

Ah, ho bisogno di rispolverare il mio matematica :-p, Grazie, Lo implementerò in questo modo, ma continuo a pensare che dovrei fare un if in modo tale che dopo 828,5 giorni si azzeri a 0 ;-) – jmasterx

1

Ci sono molti, molti modi diversi per scuoiare questo gatto. Ad esempio, una delle tue routine potrebbe restituire un bool che indica se questa animazione debba essere estratta o meno dalla coda di animazione. Non sono sicuro quali siano le differenze tra aggiornamento, disegno e rendering, ma tutto ciò è oltre il punto ...

La mia raccomandazione sarebbe quella di leggere. Leggi su quali altri motori di animazione stai facendo, trova un buon libro di gemme di programmazione grafica e raccogli idee e tecniche da implementazioni preesistenti e consolidate. Una soluzione ancora migliore sarebbe quella di utilizzare , risparmiando così tanto dolore e sofferenza.

+0

A meno che non siano masochisti. – ChaosPandion

Problemi correlati