IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Moteurs de jeux vidéo Discussion :

GameState auto destruction


Sujet :

Moteurs de jeux vidéo

  1. #1
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut GameState auto destruction
    Bonjour à tous,

    Dans le cadre d'un moteur de jeu qui gère une pile de GameState, dans la pratique les state vont s'auto-détruire.
    Par exemple, le state menu va dire au moteur de jeu de changer d'état pour passer sur le jeu lui-même. Après cette action, l'état menu devra donc être détruit.

    J'aurais tendance à mettre dans la méthode changerEtat du moteur de jeu l'instruction pour détruite l'état, mais dans le cas ou c'est l'état qui fait appelle à cette méthode, ça pose un gros problème.
    Certains règlent le problème en utilisant des singletons, donc pas de destruction manuelle, d'autres en renvoyant le nouvel état et c’est le moteur qui détruit ensuite l'ancien état.

    Ces deux solutions ne me plaisent pas trop, la première créant des variables globales, la seconde forçant à adapter tout le code pour gérer l'état de retour (méthode update, gestion des évènements...).

    J'aurais plutôt envie que le moteur de jeu stocke l'état à détruire, et le fasse une fois qu'on sort de la méthode de l'état.
    Voici un scénario :
    - le moteur appelle state->update
    - l'état appelle moteur->changeEtat(nouvel état)
    - le moteur remplace l'état et garde le précédent en mémoire
    - au retour dans la méthode update de l'état, il fini ce qu'il a à faire
    - au retour au moteur de jeu, dans la boucle principale, si il y a un état à supprimer, il le supprime (delete)

    De cette manière, quel que soit l'objet ou le moment où un changement d'état à lieu, on a pas à se soucier de la destruction.

    Pouvez-vous me faire des commentaires sur le fonctionnement que je propose par rapport aux autres solutions.
    Ou encore mieux, m'en proposer une autre.

    Merci.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Bonjour,

    En orienté objet, tout dépend de qui a la responsabilité de la mémoire (propriétariat) de votre GameState. De plus, je pense aussi que la destruction de chaque GameState à chaque changement peut être un peu overkill, car il est nécessaire de tout recharger par la suite.

    Je n'arrive pas à voir les avantages de votre méthode, car la destruction du GameState est retardée (on dirait que vous allez placé le GameState à détruire d'un seau, pour le détruire plus tard).
    Je suis aussi contre le Singleton. La méthode de tout gérer dans changerEtat, ne me semblait pas si mauvaise. Mais pour moi, c'est le chef orchestre de GameState qui doit gérer les transitions de GameState et donc appeler cette méthode (qui est une méthode membre du chef orchestre).

  3. #3
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    C'est ça, dans mon exemple je retarde la destruction de l'objet.

    Celui qui gère les états est le moteur de jeu.
    Mais ceux qui décident du changement d'état sont les états (l'état d'intro va appeler l'état du menu, l'état du menu va appeler l'état de jeu...).
    Le problème est que cet appel d'un autre état par un état, provoque la destruction de celui actuel dans le cas d'un remplacement, donc si il y a destruction immédiate (ce qui devrait être le cas), on détruit un objet en train d'être utilisé.

    Du coup le chef d'orchestre remplace l'état, mais retarde la destruction le temps qu'il finisse.

    Je pense qu'il y a mieux comme gestion, d'où ma question.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Dans mon esprit, celui qui change l'état cela devrait être le moteur et non directement un état. Pour cela, l'état retourne ce qu'il pense qui devrait être l'état suivant (ou même lui même).

  5. #5
    Membre régulier
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Points : 122
    Points
    122
    Par défaut
    Je ne vois pas comment autre chose qu'un état pourrait décider de l'état suivant.

    Dans un cas concret, l'état du menu, quand le joueur click sur le bouton démarrer, l'état du menu fait appel à l'état de jeu.

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 897
    Points : 219 633
    Points
    219 633
    Billets dans le blog
    125
    Par défaut
    Dans le cas où, l'état retourne au moteur, l'état suivant à mettre en place.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme de auto-destruction virtuel d'une classe
    Par djun1 dans le forum Débuter
    Réponses: 4
    Dernier message: 28/12/2013, 19h46
  2. [Toutes versions] BDD auto destructible à une date precise
    Par mouhamadrouabha dans le forum Access
    Réponses: 1
    Dernier message: 07/04/2012, 10h04
  3. Auto - destruction
    Par deubelte dans le forum C++
    Réponses: 16
    Dernier message: 10/02/2012, 15h36
  4. [JAVA] Programme auto-destructible
    Par caparenlive59 dans le forum Général Java
    Réponses: 7
    Dernier message: 20/03/2008, 11h51
  5. [Classe] Auto destruction d'instances
    Par Clorish dans le forum Langage
    Réponses: 7
    Dernier message: 11/07/2005, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo