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

Développement 2D, 3D et Jeux Discussion :

collision entre un sprite d'une classe et un vector2d liste


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut [XNA] collision entre un sprite d'une classe et un vector2d liste
    apres quelque essai je n ai pas reussi a créer une methode de collision avec un vector2d voici ce que j avais ecrit pour l instant a la fin du scripts:
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    using System;
    using System.Collections.Generic;
    using System.Text;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Storage;
    using Microsoft.Xna.Framework.Content;
     
     
    namespace MonsterWorld
    {
        class homme
        {   //propiétés statiques : tous les hommes utilisent les mêmes textures
            static private Texture2D textureHomme1;
            static private Texture2D textureHommeKO;
            static private Texture2D textureMissile;
            List<Vector2> listPosMissile = new List<Vector2>();
            //chaque homme dispose des propriétés suivantes
            private Rectangle posHomme;
            private Rectangle posMissile;
                  //utilisée pour changer les images toutes les 8 exécutions de boucle de jeu
     
     
            public Rectangle PosHomme
            {
                get
                { return posHomme; }
     
            }
     
            public homme()
            {//constructeur par défaut
     
                //taille du rectangle de l homme
                posHomme = new Rectangle(200,0,98,58);
            }
     
            static public void LoadGraphicsContent(ContentManager monContent)
            {
                //charge les textures
                textureHomme1 = monContent.Load<Texture2D>("images/homme/ManRight1") as Texture2D;
                textureHommeKO = monContent.Load<Texture2D>("images/homme/ManKilled") as Texture2D;
                textureMissile = monContent.Load<Texture2D>("images/objects/tire") as Texture2D;
     
            }
     
            public void Update(GamePadState EtatGamePad, KeyboardState EtatClavier,  Rectangle ecran)
            {//teste l'état du clavier      
                if (posHomme.X <= 0)//des que la position de l'homme disparait de l'ecran alors on le repositionne a droite
                {
                    posHomme.X = ecran.Width;
     
                }
                for (int i = 0; i < listPosMissile.Count; i++)
                {
                    Vector2 v = listPosMissile[i];
                    if (listPosMissile[i].X< 0) listPosMissile.RemoveAt(i);
     
                    v.X++;
                    listPosMissile[i] = v;
                }
     
     
     
                    if (Keyboard.GetState().IsKeyDown(Keys.Space) && PosHomme.X > 20)
                    {//si on appuyé sur espace, le personnage fait un bond
                        listPosMissile.Add(new Vector2(posHomme.X, posHomme.Y));
     
                    }
     
     
     
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Right))
                     {
                         posHomme.X++; 
     
                     }
                     if (Keyboard.GetState().IsKeyDown(Keys.Left))
                     {
                         posHomme.X--;
                     }
                //controle fleche haut
                     if (Keyboard.GetState().IsKeyDown(Keys.Down))
                     {
                         posHomme.Y++;
     
                     }
     
                     if (Keyboard.GetState().IsKeyDown(Keys.Up))
                     {
                         posHomme.Y--;
     
                     }
     
     
             }
            public void Draw(SpriteBatch monSpriteBatch, etatsJeu etat)
            {
                if (etat == etatsJeu.encours)
                {
     
     
                        monSpriteBatch.Draw(textureHomme1, PosHomme, Color.White);
                        for (int i = 0; i < listPosMissile.Count; i++)
                           monSpriteBatch.Draw(textureMissile, listPosMissile[i], Color.White);
     
                }
                    else
                    {
                        if (etat == etatsJeu.perdu)
                        {
                            monSpriteBatch.Draw(textureHommeKO, PosHomme, Color.White);
                        }
                    }
                }
     
     
           public  bool collision(monstre lemonstre)
            {// détecte une collision entre l'objet homme en cours et lemonstre passé en paramètre
             return posHomme.Intersects(lemonstre.PosMonstre);
           }
            public bool collision(Vector2 lemissile)
            {// détecte une collision entre l'objet monstre en cours et lemissile passé en paramètre
                return posMonstre.Intersects(lemissile.listPosMissile);
     
            }
     
        }
    }

  2. #2
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    Salut kate

    En fait il faudrait nous en dire un peu plus sur cette mystérieuse fonction intersect car apparement c'est elle qui fait le boulot.

    De plus l'appel du test de collision doit se faire en continu, donc tu dois tester les collisions à chaque frame...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  3. #3
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    bonjour,
    pour repondre a ta question intersect est une methode utilise dans visual c# pour reperer 2 retcangle donc 2 texture rentrant en collision.
    donc nous il detecte:
    détecte une collision entre l'objet homme en cours et lemonstre passé en paramètre

    et moi je voudrait qu il detetce une collison entre l objet monstre en cours et lemissile passer en parametre.
    ce que j aurai put reprendre de l autre methode que j avais fait entre la collision entre l'homme et le monstre mais c etait deux classes distinte.
    ici la methode ferait appele a la classe monstre mais missile n est pas une classe voila ce qui me gene.
    merci de ton aide j espere que je t ai eclairer.

  4. #4
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    l'intersection entre A et B c'est la meme chose que l'intersection entre B et A...

    donc si tu peut pas faire missile.intersect(monstre), essaye avec monstre.intersect(missile)
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  5. #5
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    kate59, ton code semble correct je ne comprends pas ton problème

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return posMonstre.Intersects(lemissile.listPosMissile);
    lemissile.listPosMissile retourne je suppose un missile mais est-ce que cela retourne le rectangle de collision du missile ?

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Points : 149
    Points
    149
    Par défaut
    pour repondre a ta question il me retourne deux message d'erreur,

    Le nom 'posMonstre' n'existe pas dans le contexte actuel

    'Microsoft.Xna.Framework.Vector2' ne contient pas de définition pour 'listPosMissile'

    le 1 je comprend que je doit mettre cette methode dans la classe monstre plutot que homme qui logique mais lisposmissile lui je ne sais pas.

  7. #7
    Membre éprouvé
    Avatar de Ange_blond
    Homme Profil pro
    Ingénieur développement en 3D temps réel
    Inscrit en
    Mars 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement en 3D temps réel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2007
    Messages : 902
    Points : 1 179
    Points
    1 179
    Par défaut
    le probleme que tu as sous les yeux c'est un probleme lié à la POO apparement, et non pas au niveau des méthodes...
    "le langage C permet de tout faire, y compris se tirer dans le pied. Le langage C++ permet de tout faire, y compris se tirer dans le pied - et réutiliser la balle"

  8. #8
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 385
    Points
    20 385
    Par défaut
    Citation Envoyé par kate59 Voir le message
    pour repondre a ta question il me retourne deux message d'erreur,

    Le nom 'posMonstre' n'existe pas dans le contexte actuel

    'Microsoft.Xna.Framework.Vector2' ne contient pas de définition pour 'listPosMissile'

    le 1 je comprend que je doit mettre cette methode dans la classe monstre plutot que homme qui logique mais lisposmissile lui je ne sais pas.
    KAte59 je te conseille de piger un peu plus C# parce qu'on ne peut pas t'aider totalement pour cela..
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return posMonstre.Intersects(lemissile.listPosMissile)
    de listPosMissile il faut que tu obtiennes une instance de missile et que tu testes l'intersection avec un monstre c'est le BA à BA

Discussions similaires

  1. [Phaser] Soucis de collision entre 2 sprites
    Par counteraccro dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 21/01/2015, 16h54
  2. Syntaxe entre boost deadline_timer et une class
    Par Dokare dans le forum Boost
    Réponses: 2
    Dernier message: 27/11/2014, 22h44
  3. Collision entre un cercle et une ligne
    Par Happy dans le forum Physique
    Réponses: 1
    Dernier message: 21/03/2009, 15h47
  4. Réponses: 11
    Dernier message: 31/01/2005, 17h48

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