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

C# Discussion :

Gestion d'unités multiples.


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 66
    Points
    66
    Par défaut Gestion d'unités multiples.
    Bonjour, dans un cadre didactique, j'aime bien me faire des prototypes de jeux dans un cadre minimaliste, sans utiliser de moteur.
    J'ai un problème récurrent, celui de gérer des unités multiples qui n'agissent pas forcément en même temps, pour faire des jeux de type tower defense, auto bomber, auto battler etc
    Alors si vraiment je ne trouve pas, je pense que la plupart des moteurs de jeux résoudraient le problème, mais j'aimerais bien faire des petits bouts de code indépendamment d'un moteur.
    Par exemple si j'ai des unités qui doivent agir tous les 0.7s, 1.2s, 1.6s, quelle est la meilleurs solution pour vous ? Est ce qu'il y a une structure de donnée ou un pattern qui résoudrait proprement ce problème ?
    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 653
    Points : 2 181
    Points
    2 181
    Par défaut
    Bonjour,

    Que ce soit un moteur ou non la solution est simple et c'est la même d'ailleurs :

    Tu lances un timer dès le lancement du jeu, très souvent associé à ta boucle principale (cette partie est gérée automatiquement si tu utilises un moteur ou autre) :

    Grosso modo, n'importe quel jeu est constitué uniquement de 2 très grosses fonctions : Update() et Draw(), l'une s'occupe de tout ce qui est logique, et l'autre graphique.

    Ensuite tu définis un temps de réaction par unité, et tu stock le temps de sa dernière action.

    Du coup dans ta boucle Update qui est appelée à chaque frame du jeu, tu vas aller voir chaque unité de ton jeu et voir si son temps de réaction est écoulé. Si c'est le cas alors elle fait son truc et tu rafraichis son temps de dernière action.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    public class Tower
    {
        float updateRate;
        float lastActionTime;
     
        public void UpdateTower(float currentTime)
        {
            if (lastActionTime + updateRate <= currentTime)
            {
                Action();
     
                lastActionTime = currentTime; // On rafraichit pour cadencer l'action
            }
        }
     
        public void Action()
        {
            // Faire un truc comme tirer un projectile
        }
    }
    Généralement pour ce genre de problématique, il est préférable de faire une classe mère qui englobe tout ça, comme Entity, qui permet de régir les différents éléments du jeu. Comme ça, chaque élement est stocké dans une gigantesque liste ou on peut les mettre à jour, les dessiner et les faire interagir entre eux. (Chose qui est aussi automatisé avec un moteur)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 66
    Points
    66
    Par défaut
    Merci pour la réponse.
    J'avais plus ou moins pensé à cette solution.
    Mais je me demandais si il n'y avait pas un moyen d'éviter de faire tous ces tests inutiles ...
    C'est cependant une solution qui a le mérite de la simplicité, alors je vais partir avec ça

  4. #4
    Membre chevronné
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    653
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 653
    Points : 2 181
    Points
    2 181
    Par défaut
    Ce ne sont pas à proprement parlé des tests, il faut bien cadencer & stocker ça quelque part.

    Après si tu es motivé, tu peux toujours faire un petit moteur maison qui automatise un peu tout ça et cacher le tout dans ses rouages. Car cette structure est omniprésente dans les jeux / moteurs de toute façon.

Discussions similaires

  1. [Data] Gestion des unités de persistance multiple
    Par Khaled.Noordin dans le forum Spring
    Réponses: 1
    Dernier message: 14/09/2012, 13h47
  2. [A-03] Gestion des relations multiples
    Par Helder_Tokyo dans le forum Modélisation
    Réponses: 12
    Dernier message: 04/12/2008, 06h57
  3. Algorithme de gestion d'objets multiples
    Par aderdu91 dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 18/04/2007, 22h11
  4. [VBA-E]Gestion d'erreurs multiple
    Par icetechnik dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 18/04/2006, 22h35
  5. Programmation par unités multiples
    Par Mimi Bulles dans le forum Langage
    Réponses: 6
    Dernier message: 09/06/2005, 23h08

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