2010-02-08 11 views
5

Tengo una idea de cómo quiero abordar esto, pero no estoy seguro de si es ideal. Por evento quiero decir, por ejemplo, si el jugador gana, un montón de chispas vuelan durante 1 segundo. Estaba pensando en crear mi clase de motor de juego, luego crear una clase base de evento de juego que tenga 3 funciones vacías, actualizar, dibujar, renderizar. Podría haber, por ejemplo, forjas para recoger 100 monedas durante 3 segundos. La forma en que quiero implementarlo es tener un vector de eventos en mi motor de juego donde pueda empujar la animación de los fuegos artificiales. Una vez que se inserta algo en el vector, el juego realiza el evento [i] .render(), etc. quitándolo pensé que cada evento podría tener una duración de evento en cuadros, y cada fotograma se incrementa, si el uint coincide con la longitud, se saca del vector. Simplemente no estaba seguro de si hacerlo de esta manera era la mejor manera.¿Cómo se manejan las longitudes de eventos de juegos en juegos 2D?

Gracias

Respuesta

1

Me gustaría que cada instancia de evento tuviera un método llamado isDone, o algo así. Luego, para cada cuadro, repita los eventos y:

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

Hacerlo de esta manera permite cambios más fáciles en el futuro. No todos los eventos durarán una cantidad de tiempo fija (esto puede no ser cierto para su juego), algunos incluso pueden depender de otras cosas que no sean el marco actual.

Pero en sus eventBaseClass, se podría definir como isDone:

return this.endFrame >= game.currentFrame; 

y anularlo en cualquier evento que debe.

+0

¡Me gusta mucho esto! ¡Gracias! ¿Pero aumentar el currectframe todo el tiempo puede conducir al desbordamiento? – jmasterx

+1

Suponiendo una arquitectura de 32 bits, y 60 cuadros por segundo, se desbordaría después de 828.5 días: (2 ** 32)/60/60/60/24 – Ponkadoodle

+0

Ah, tengo que repasar mis cálculos :-p, Gracias, Lo implementaré de esta manera, pero todavía creo que debería hacer un if para que después de 828.5 días se restablezca a 0 ;-) – jmasterx

1

Hay muchas, muchas maneras diferentes de pelar este gato. Por ejemplo, una de sus rutinas podría devolver un bool que indica si esta animación debería aparecer o no en la cola de animación. No estoy seguro de cuáles son las diferencias entre actualizar, dibujar y renderizar, pero todo eso es además del punto ...

Mi recomendación sería leer. Lea sobre lo que otros motores de animación están haciendo, busque un buen libro de gemas de programación de gráficos y obtenga ideas y técnicas de implementaciones preexistentes y establecidas. Una solución aún mejor sería use uno de ellos, ahorrándole mucho dolor y agonía.

+0

A menos, por supuesto, que sean masoquistas. – ChaosPandion