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 :

message d'erreur du a index hors limites


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] message d'erreur du a index hors limites
    voila j ai ecrit un script pour faire afficher un sprite mais des que je veux que celui lance un missile il m ecrit ca:


    Erreur 1 Impossible de modifier la valeur de retour de 'System.Collections.Generic.List<Microsoft.Xna.Framework.Vector2>.this[int]', car il ne s'agit pas d'une variable
    voici le 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
    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; 
                  //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++)
                {
                    if (listPosMissile[i].Y < 0) listPosMissile.RemoveAt(i);
                    listPosMissile[i].Y -= 1;
                }
     
     
     
                    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--;
     
                     }
    l erreur est a cette ligne la:
    listPosMissile[i].Y -= 1; vers le milieu du script.
    a votre avis.
     
     
             }
            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);
           }
        }
    }

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par kate59 Voir le message
    voila j ai ecrit un script pour faire afficher un sprite mais des que je veux que celui lance un missile il m ecrit ca:


    Erreur 1 Impossible de modifier la valeur de retour de 'System.Collections.Generic.List<Microsoft.Xna.Framework.Vector2>.this[int]', car il ne s'agit pas d'une variable
    voici le 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
    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; 
                  //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++)
                {
                    if (listPosMissile[i].Y < 0) listPosMissile.RemoveAt(i);
                    listPosMissile[i].Y -= 1;
                }
     
     
     
                    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--;
     
                     }
    l erreur est a cette ligne la:
    listPosMissile[i].Y -= 1; vers le milieu du script.
    a votre avis.
     
     
             }
            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);
           }
        }
    }
    Je crois que ce qui dis le compilateur est clair : tu n'as pas le droit de faire ça. C'est la définition du langage (C#) qui te l'interdit. Je comprends que tu sois dans une phase d'apprentissage, mais rien ne t'empêche de regarder dans la documentation de Visual C# pourquoi cette erreur est provoquée, ce qui devrait te donner des pistes pour trouver une solution.

    Comme le dit le proverbe: "aide toi, et le ciel t'aidera"
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Bon bas tu met sa sinon

    Vector2 v = listPosMissile[i];
    v.Y --;
    listPosMissile[i] = v;

  4. #4
    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
    voici mon nouveau script:
    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
    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; 
                  //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].Y < 0) listPosMissile.RemoveAt(i);
     
                    v.Y--;
                    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);
           }
        }
    }
    mais voila il m ecrit a present qu il y a une erreur a cette ligne:
    listPosMissile[i] = v;
    il ecrit:
    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
    Nom du paramètre : index
    je ne comprend meme en allant dans l aide.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Points : 50
    Points
    50
    Par défaut
    Met le if(x) removeAt à la fin de la boucle for à tout hasard

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

Discussions similaires

  1. [SSRS][2k8] Index hors limites
    Par matb33 dans le forum SSRS
    Réponses: 5
    Dernier message: 12/05/2016, 12h34
  2. erreur: indice de liste hors limite
    Par Abou Zar dans le forum Web & réseau
    Réponses: 12
    Dernier message: 06/10/2010, 13h08
  3. [osCommerce] Message d'erreur Notice: Undefined index
    Par idamarco dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 11
    Dernier message: 23/10/2009, 14h42
  4. Message d'erreur Notice: Undefined index:
    Par helene38250 dans le forum Langage
    Réponses: 13
    Dernier message: 27/10/2008, 13h04
  5. [débutant] erreur "indice de liste hors limites(1)"
    Par lidouka dans le forum Langage
    Réponses: 2
    Dernier message: 13/12/2005, 14h31

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