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

XNA/Monogame Discussion :

Partager la même position entre deux sprites


Sujet :

XNA/Monogame

  1. #1
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut Partager la même position entre deux sprites
    Bonsoir,

    Je me suis mis très récemment à XNA afin de me consacrer enfin à la programmation de jeux vidéo après pas mal de temps à avoir développé des applications de gestion. J'ai réussi à trouver quelques tutos intéressants sur les bases (afficher un sprite, déplacer un sprite, rotation d'un sprite,...). Dans un des tutos, l'auteur utilisait deux sprites: un tank et son canon. Ensuite il nous expliquait l'avantage d'avoir une classe qui hérite de DrawableGameComponent. Donc en bon élève je fais de même, j'ai crée deux classes qui héritent de DrawableGameComponent, une pour le tank et une pour le canon. Voila pour l'intro, maintenant mon problème.

    Ce que j'ai voulus faire, dans ma classe Tank, j'ai une propriété privé qui est de type classe Canon, et cela aurait donc était à ma classe Tank d’appeler les méthodes Update et Draw de la classe Canon au bon moment(dans les méthodes Update et Draw de la classe Tank). La position du Tank est représenté par une propriété de type Vector2, et il se trouve que mon Canon doit avoir la même position que le tank (le canon étant au centre du Tank, ça arrange bien les choses...). Alors dans mon empressement, sans réfléchir, je me dit que je peux passer au constructeurs de la classe Canon le Vector2 du Tank. Comme ça quand j'update la position du Tank, cela va se répercuter sur le Canon. Manque de peau cela ne marche pas. Stupide comme je suis et à vouloir aller trop vite, il y a un détail (et pas des moindre) que j'ai zappé, Vector2 est une struct et pas une classe. Ma question est donc comment puis-je partager une position qui est commune entre mes deux objets?

    J'ai pensé à faire en sorte que le Tank la passe en paramètre lorsqu'il appelle une fonction d'update du Canon, mais cela ne me convient pas trop. Voulant rester dans mon idée de donner qu'un fois la position au Canon, puis après la mettre à jours juste à travers la classe Tank, je pensais créer une classe qui n'aurait qu'une propriété de type Vector2, et là j'aurais pu donner cette classe au Canon qui quand il souhaite mettre à jours sa position récupère le Vector2. Mais créer une classe juste pour ça, je trouve pas ça top. Donc je voulais avoir votre avis sur la question.

    Je me doute que le problème n'est pas forcement très compliqué, et même si ça se trouve ne mérite pas de se poser. Mais ça me tracassait, alors je voulais avoir un avis extérieur. Désolé d'avance si le problème, et la question qui le suit sont stupides.

    Je vous remercie d'avance pour vos réponse.

  2. #2
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    EDIT : j'ai lu en diagonale, mon message sert a rient, je relis

    EDIT²: Donc en faite le problème je pense que c'est inutile que ta classe Canon hérite de DrawableGameComponent. Fais une classe "normal" avec une méthode UpdatePosition() appeler par la classe Tank a chaque fois que la position change.

    Ou alors tu peux essayer de passer ta variable de position par référence et garder que son adresse, mais je sais pas trop comment ça marche encore.

    Ou alors encore, mais je trouve ça crade, tu passe la référence en static et en public

  3. #3
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Je comprend pas trop ton problème.

    Tu as une classe tank et une classe canon.

    La position de ton canon dépend de celle du tank.

    Comme ton canon est une propriété de ta classe tank, je suppose que tu as tank.position et canon.position.

    Dans ta méthode update de tank tu peu faire canon.position = tank.position

    Sinon dans ta méthode update de tank tu apelle la methode update de canon en passant la position du tank en paramètre.

    Donc on a :

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    class Canon
    {
        private Vector2 canonPosition;
        public Vector 2 CanonPosition
        {
            get { return canonPosition; }
            set { canonPosition = value; }
        }
    
        public void Update(Vector2 position)
        {
          
        }
    }
    
    class Tank
    {
        private Vector2 tankPosition;
        public Vector 2 TankPosition
        {
            get { return tankPosition; }
            set { tankPosition= value; }
        }
    
        private Canon tankCanon;
    
         public void Update()
        {
            tankPosition = new Vector2(10,10);
            canon.Update(tankPosition) ou canon.CanonPosition = tankPosition 
        }
    }

  4. #4
    Membre du Club Avatar de Takumi
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2009
    Messages : 163
    Points : 62
    Points
    62
    Par défaut
    Bonjour,

    Je suis désolé, c'est moi qui ai encore dit une bêtise, et je voulais coder d'une certaine façon. Mais les solutions proposées sont parfaites, je passerais la position soit par un accesseur soit en paramètre.

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

Discussions similaires

  1. Comment partager une même form entre 2 projets ?
    Par WebPac dans le forum Windows Forms
    Réponses: 5
    Dernier message: 31/12/2007, 16h17
  2. Réponses: 8
    Dernier message: 11/03/2006, 18h40
  3. [vector] Partager une même variable entre deux objets.
    Par Ekinoks dans le forum SL & STL
    Réponses: 18
    Dernier message: 25/08/2005, 20h40
  4. Réponses: 14
    Dernier message: 02/05/2005, 18h14

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