JeuWeb - Crée ton jeu par navigateur
Système de replay "Fantôme" ! - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Système de replay "Fantôme" ! (/showthread.php?tid=1964)



Système de replay "Fantôme" ! - xviniette - 25-02-2014

Bonsoir à tous ! Voilà je m'amuse sur un petit projet et je cherchais à y implémenter le replay "fantôme" ! Ce système permet de de visionner directement en jeu tous les essais antérieurs.

En gros un système sembable à celui de super meat boy !
[Image: screenreplay.jpg]

Ma question : Comment stocker tous les essais précédents pour un plateformer type super meat boy ?

Sauvegarder les positions x/y à chaque tour de boucle ? A un intervalle ? Stocker les touches utilisées ?

En gros qu'est ce qui est le plus performant sans être trop compliqué ?

En vous remerciant !


RE: Système de replay "Fantôme" ! - Ter Rowan - 25-02-2014

stocker les événements ? (les touches pressées mais les éventuels événements aléatoires type "tir du canon machin")


RE: Système de replay "Fantôme" ! - xviniette - 25-02-2014

Et sachant qu'il n'y a pas d'autres événements que les déplacements du joueurs ?


RE: Système de replay "Fantôme" ! - Xenos - 26-02-2014

En rédigeant le post, j'ai abouti à 3 méthodes:
  • Evènementielle (comme proposée): pas terrible pour de longues durées, mais peu d'ajout de code
  • Keyframes: attrayante, mais lourde en mémoire si on ne veut pas "rater" des actions
  • Mixte: ma préférée


Méthode évènementielle
Supreme Commander me semble stocker les évènements pour pouvoir afficher les "replay". Cela aboutit parfois à des désynchronisations si tu changes un paramètre global du jeu. par exemple, si tu stockes l'évènement "accélération vers la droite ON à la date T", si l'accélération est une valeur globale, la modifier changera le replay. Cela n'arrive pas si tu stockes la valeur d'accélération aussi: "évènement: accélération; direction: droite; valeur: 10; date: T".

Ensuite, il faut parcourir cette table sous la forme:
Code :
Pour chaque ligne
>> Attendre la durée T
>> Lancer l'évènement indiqué avec ses paramètres
Passer à la ligne suivante

En cas d'aléatoire, il faudra en stocker la valeur.


Si tu n'as que la trajectoire du joueur, et que celle-ci ne doit pas tenir compte du décor, alors tu peux stocker les débuts/fin d'accélération. Cela te permettra de calculer la vitesse du personnage et donc, sa position.

Problème: chaos
Toutefois, un tel mécanisme est sujet au chaos. Une erreur d'arrondis qui se promène, et la trajectoire peut changer totalement!
Tu peux alors stocker des positions à intervalles réguliers, avec les valeurs d'accélération, de vitesse et de position du personnage. Ces "points-clefs" permettront de resynchroniser le replay.



Méthode Keyframes
Si tu préfères ne stocker que des points-clefs, genre keyframe (comme les animations finalement), alors tu peux enregistrer la vitesse et la position du personnage à intervalle régulier. Ensuite, tu peux tracer une courbe de Bézier cubique qui passe par les points enregistrés à T et à T', et donc la dérivée en T est la vitesse à la date T, et idem pour T'.

La méthode des keyframes te garantit que le replay ne dégénèrera pas avec sa durée: peu importe la durée du replay, les keyframes passeront toujours aux endroits où le joueur est passé.

Problème: frames manquantes
Si l'intervalle de temps entre deux keyframes est trop grand, alors le replay pourra sauter des mouvements que le joueur avait fait (exemple: le système enregistre une keyframe, le joueur descend et remonte une échelle, le système enregistre la keyframe suivante: le replay ne montre pas la descente de l'échelle).




Méthode mixte
Enfin, tu peux faire un mix des deux: utiliser des keyframes, mais les enregistrer que lorsqu'un évènement survient (changement de vitesse du joueur / accélération modifiée).
C'est, je pense, la meilleure méthode car elle évite la dégénérescence (grâce aux keyframes), sans pour autant sauter des actions (car toute action, aka évènement, entraine l'enregistrement d'une keyframe).


RE: Système de replay "Fantôme" ! - xviniette - 26-02-2014

C'est vrai que la méthode mixte me semble vraiment intéressante ! Je pense adopter ce système.

Merci