5 votes

Comment les longueurs des événements de jeu sont-elles gérées dans les jeux en 2D

J'ai une idée de la façon dont je veux aborder cela mais je ne suis pas sûr que ce soit idéal. Par événement, je veux dire par exemple, si le joueur gagne, une série d'étincelles volent pendant 1 seconde. Je pensais créer ma classe de moteur de jeu, puis créer une classe de base d'événement de jeu qui a 3 fonctions void, mise à jour, dessin, rendu. Il pourrait y avoir par exemple des feux d'artifice pour collecter 100 pièces pendant 3 secondes. La façon dont je veux l'implémenter est d'avoir un vecteur d'événements dans mon moteur de jeu où je peux pousser l'animation des feux d'artifice. une fois quelque chose est poussé dans le vecteur, le jeu fait event[i].rendu() etc... Pour le supprimer, j'ai pensé que chaque événement pourrait avoir une longueur d'événement en trames, et chaque trame un uint est augmenté, si l'uint correspond à la longueur, il est extrait du vecteur. Je n'étais juste pas sûr que faire comme ça était la meilleure façon.

Merci

1voto

fbrereto Points 21711

Il existe de nombreuses façons différentes d'aborder cette tâche. Par exemple, l'une de vos routines pourrait renvoyer un booléen indiquant si cette animation doit être retirée de la file d'attente des animations. Je ne suis pas sûr des différences entre les fonctions update, draw et render, mais tout cela est sans importance...

Ma recommandation serait de lire. Renseignez-vous sur ce que font les autres moteurs d'animation, trouvez un bon livre sur les gemmes de la programmation graphique, et récupérez des idées et des techniques à partir d'implémentations préexistantes et établies. Une solution encore meilleure serait de utiliser l'une d'entre elles, vous évitant ainsi beaucoup de douleur et d'agonie.

1voto

Wallacoloo Points 2957

Je voudrais que chaque instance d'événement ait une méthode appelée isDone, ou quelque chose comme ça. Ensuite, pour chaque trame, itérez à travers vos événements et :

if (event.isDone()) {
    //supprimer l'événement
} else {
    event.update();
}

Faire de cette manière permet des changements plus faciles à l'avenir. Tous les événements ne dureront pas pour une durée fixe (ceci pourrait ne pas être vrai pour votre jeu), certains pourraient même dépendre d'autres choses que la trame actuelle.

Mais dans votre eventBaseClass, vous pourriez définir isDone comme :

return this.endFrame >= game.currentFrame;

et le remplacer dans tous les événements dont vous avez besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X