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 :

Jeu plateforme 2D


Sujet :

C#

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut Jeu plateforme 2D
    Je suis en train de faire un jeu de plateforme 2D, mais j'ai un énorme problème. J'ai fait afficher la map avec un fichier texte (genre 1= une sorte de sol, 2 = a une autre sorte...) J'ai créé deux tableau: un tableaurelatif qui est la position relative sur l'écran (genre le coin en haut à gauche va toujours être 0,0) et une positionabsolue (genre le point 0,0 est seulement le coin supérieur gauche du début)Le probleme c'est que quand je fait bouger le bonhomme sur les ''marges'' on dirait que la position absolue de la map change et donc que le trou se déplace fak le bonhomme se met à tomber lorsquil est sur le gazon à environ 1cm du trou.

    La classe pour gérer le bonhomme

    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    public class Héros : SpriteMobileAnimé
        {
           const float ACCÉLÉRATION_GRAVITATIONNELLE = 600f;
           const float VITESSE_INITIALE_SAUT = -350f;
           Vector2 PositionInitialeTomber { get; set; }
     
     
           public int ToucheMurDroit { get; protected set; }
           public int ToucheMurGauche { get; protected set; }
     
            SpriteFont ArialFont { get; set; }
     
            bool EstSolMarchable { get; set; }
            bool EstAir { get; set; }
            bool EstUnMurGauche { get; set; }
            bool EstUnMurDroit { get; set; }
     
            Vector2 PositionInitialeSaut { get; set; }
            float TempsÉcouléDepuisDébutSaut { get; set; }
            float TempsÉcouléDepuisDébutChute { get; set; }
     
            protected enum ÉtatJoueur { Repos, EnSaut, EnChute }
            ÉtatJoueur ÉtatHéros { get; set; }
            Vector2 DimensionsHéros;
            public bool EstSurMargeDroite 
            {
                get
                {
                   return PositionRelativeÉcran.X >= MargeDroite;
                }
     
                protected set { }
            }
     
            public bool EstSurMargeGauche
            {
                get
                {
                   return PositionRelativeÉcran.X <= MargeGauche;
     
                }
     
                protected set { }
            }
     
            public bool EstSurMarge 
            {
                get
                {
                   return (EstSurMargeDroite || EstSurMargeGauche);
     
                }
            }
     
            public Héros(Atelier game, string nomSprite, int nbImages, Vector2 positionDépart, float intervalleMAJ)
                : base(game, nomSprite, nbImages, positionDépart, intervalleMAJ)
            {
            }
     
            public override void Initialize()
            {
                ÉtatHéros = ÉtatJoueur.Repos;
                PositionRelativeÉcran = new Vector2(Jeu.Window.ClientBounds.Width / 4, 160);
                PositionAbsolue = PositionRelativeÉcran;
                ToucheMurDroit = 1;
                ToucheMurGauche = 1;
                base.Initialize();
            }
     
            protected override void LoadContent()
            {
                ArialFont = Jeu.GestionnaireDeFonts.Find("Arial"); 
                base.LoadContent();
                DimensionsHéros = new Vector2(Image.Bounds.Width / NbImages, Image.Bounds.Height / NbImages);
            }
     
            protected override void CalculerMarges()
            {
                MargeGauche = Jeu.Window.ClientBounds.Width / 8;
                MargeDroite = Jeu.Window.ClientBounds.Width / 2 - (int)DimensionsHéros.X;
                MargeHaut = 0;
                MargeBas = Jeu.Window.ClientBounds.Height - (int)DimensionsHéros.Y;
            }
     
            public override void Update(GameTime gameTime)
            {
                EstAir = false;
                EstSolMarchable = false;
                CollisionTile();
                GérerCollisionSol();
                GérerSaut(gameTime);
                Clear();
                base.Update(gameTime);
            }
     
            void CollisionTile()
            {
                float positionX = PositionAbsolue.X - DimensionsHéros.X / 8f;
                int NuméroCaseX = (int)positionX / (Jeu.Window.ClientBounds.Width / 20);
                int NuméroCaseY = (int)PositionAbsolue.Y / (Jeu.Window.ClientBounds.Height / 12);
                int indicateurMur = 0;
                for (int i = NuméroCaseX; i <= NuméroCaseX + 1; i++)
                {
                    for (int j = NuméroCaseY; j <= NuméroCaseY + 1; j++)
                    {
                        if (i < Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau.GetLength(0) && j + 1 < Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau.GetLength(1) && (Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[i, j].FonctionDeLaTuile != Tuile.FonctionTuile.Air))
                        {
                           if ((Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[i, NuméroCaseY + 1].FonctionDeLaTuile == Tuile.FonctionTuile.Sol)) // modifier le 2e pour franchissable car cest le k
                           {
                                EstSolMarchable = true;
                            }
                           if ((Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[NuméroCaseX, j].FonctionDeLaTuile == Tuile.FonctionTuile.Infranchissable))// || (Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[i, jj].FonctionDeLaTuile == Tuile.FonctionTuile.Sol))
                            {
                                ToucheMurGauche = 0;
                                if (ÉtatHéros != ÉtatJoueur.EnChute)
                                {
                                    PositionInitialeTomber = PositionAbsolue;
                                }
                                if (ÉtatHéros != ÉtatJoueur.EnSaut)
                                {
                                    ÉtatHéros = ÉtatJoueur.EnChute;
                                }
                            }
                            else
                            {
                                ++indicateurMur;
                            }
                           if ((Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[NuméroCaseX + 1, j].FonctionDeLaTuile == Tuile.FonctionTuile.Infranchissable))// || (Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[i+1, jj].FonctionDeLaTuile == Tuile.FonctionTuile.Sol))
                            {
                                ToucheMurDroit = 0;
                                if (ÉtatHéros != ÉtatJoueur.EnChute)
                                {
                                    PositionInitialeTomber = PositionAbsolue;//quand il saute sur un mur il redescend
                                }
                                if (ÉtatHéros != ÉtatJoueur.EnSaut)
                                {
                                    ÉtatHéros = ÉtatJoueur.EnChute;
                                }
                            }
                            else
                            {
                                ++indicateurMur;
                            }
                           if ((Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[NuméroCaseX, j].FonctionDeLaTuile == Tuile.FonctionTuile.Infranchissable))
                           {
                              EstUnMurGauche = true;
                           }
                           if ((Jeu.GestionnaireDeTuiles.TableauCaractèreDuNiveau[NuméroCaseX + 1, j].FonctionDeLaTuile == Tuile.FonctionTuile.Infranchissable))
                           {
                              EstUnMurDroit = true;
                           }
                        }
                        else
                        {
                            ++indicateurMur;
                            ++indicateurMur;
                        }
                   }
                }
     
                if (indicateurMur == 8)
                {
                   ToucheMurDroit = 1;
                   ToucheMurGauche = 1;
                   EstUnMurGauche = false;
                   EstUnMurDroit = false;
                }
     
            }
     
     
            private void GérerCollisionSol()
            {
                if (EstSolMarchable)
                {
                    ÉtatHéros = ÉtatJoueur.Repos;
                }
                else if (!EstSolMarchable && ÉtatHéros != ÉtatJoueur.EnSaut)
                {
                   ÉtatHéros = ÉtatJoueur.EnChute;
                }
                if (!EstUnMurGauche)
                {
                   ToucheMurGauche = 1;
                }
                if (!EstSurMargeDroite)
                {
                   ToucheMurDroit = 1;
                }
            }
     
            private void GérerSaut(GameTime gameTime)
            {
                if (Jeu.GestionInput.EstNouvelleTouche(Keys.Space) && ÉtatHéros == ÉtatJoueur.Repos)
                {
                    ÉtatHéros = ÉtatJoueur.EnSaut;
                    TempsÉcouléDepuisDébutSaut = 0;
                    PositionInitialeSaut = PositionAbsolue;
                }
     
                if (ÉtatHéros == ÉtatJoueur.EnSaut)
                {
                        float PositionY;
                        TempsÉcouléDepuisDébutSaut += (float)gameTime.ElapsedGameTime.TotalSeconds;
                        PositionY = PositionInitialeSaut.Y + VITESSE_INITIALE_SAUT * TempsÉcouléDepuisDébutSaut + 0.5f * ACCÉLÉRATION_GRAVITATIONNELLE * TempsÉcouléDepuisDébutSaut * TempsÉcouléDepuisDébutSaut;
                        PositionRelativeÉcran = new Vector2(PositionRelativeÉcran.X, PositionY);
                        PositionAbsolue = new Vector2(PositionAbsolue.X, PositionRelativeÉcran.Y);
                }
                else if (ÉtatHéros == ÉtatJoueur.Repos)
                {
                   TempsÉcouléDepuisDébutChute = 0;
                   TempsÉcouléDepuisDébutSaut = 0;
                   PositionInitialeTomber = PositionAbsolue;
                }
                else if (ÉtatHéros == ÉtatJoueur.EnChute)
                {
                    if (EstSolMarchable)
                    {
                        TempsÉcouléDepuisDébutChute = 0;
                        ÉtatHéros = ÉtatJoueur.Repos;
                    }
                    else
                    {
                        float PositionY;
                        TempsÉcouléDepuisDébutChute += (float)gameTime.ElapsedGameTime.TotalSeconds;
                        PositionY = PositionInitialeTomber.Y + 0 * TempsÉcouléDepuisDébutChute + (1f / 2) * ACCÉLÉRATION_GRAVITATIONNELLE * ((TempsÉcouléDepuisDébutChute) * (TempsÉcouléDepuisDébutChute));
                        PositionRelativeÉcran = new Vector2(PositionRelativeÉcran.X, PositionY);
                        PositionAbsolue = new Vector2(PositionAbsolue.X, PositionRelativeÉcran.Y);
                    }
                }
            }
     
            public override void Draw(GameTime gameTime)
            {
                string Message1 = "Absolue: (" + PositionAbsolue.X.ToString() + ", " + PositionAbsolue.Y.ToString() + ")";
                //string Message1 = "Vitesse: " + Vitesse.ToString();
                string Message2 = "Écran: (" + PositionRelativeÉcran.X.ToString() + ", " + PositionRelativeÉcran.Y.ToString() + ")";
                Vector2 PositionMessage1 = new Vector2(0, 0);
                Vector2 PositionMessage2 = new Vector2(0, 25);
                Jeu.GestionSprites.Draw(Image, PositionRelativeÉcran, RectangleSource, Color.White);
                Jeu.GestionSprites.DrawString(ArialFont, Message1, PositionMessage1, Color.MediumVioletRed, 0,
                                             Vector2.Zero, 1.0f, SpriteEffects.None, 0);
                Jeu.GestionSprites.DrawString(ArialFont, Message2, PositionMessage2, Color.MediumVioletRed, 0,
                                             Vector2.Zero, 1.0f, SpriteEffects.None, 0);
                Jeu.GestionSprites.Draw(Image, PositionRelativeÉcran, RectangleSource, Color.White);
                //Jeu.GestionSprites.Draw(Image, new Rectangle(200, 280, 40, 40), Color.White);
            }
        }
    La classe pour créer le tableau

    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
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    const int LargeurTuileSS = 50; //Largeur d'une tuile sur la Sprite Sheet
          const int LargeurTuileEnJeu = 40; //Largeur d'une tuile lors du jeu (largeur désirée)
          const float VARIABLE_DÉPLACEMENT_ = 0.01f;
          const int SECONDES_PLATEFORME_MOBILE_TYPE_1 = 5;
          const float INTERVALLE_AFFICHAGE_MOBILE = 0.0001f;
     
          public Atelier Jeu { get; set; }
          Texture2D SpriteSheetSol { get; set; }
          Vector2 DimensionImage { get; set; }
          Vector2 DimensionÉcran { get; set; }
          private Vector2 DimensionNiveau { get; set; }
          string NomNiveau { get; set; }
          float IntervalleMAJ { get; set; }
          public Tuile[,] TableauCaractèreDuNiveau { get; protected set; } //c'est le tableau ou que tous les caractère sont entreposé genre FFFE pour feu feu feu eau...comme dans abitibi jones
          StreamReader FichierDeLecture { get; set; }
     
          float TempsÉcouléDepuisMAJ { get; set; }
          float TempsÉcouléDepuisMAJMobile { get; set; }//pour la plateforme bougeante
     
          public Niveau(Atelier game, Vector2 dimensionNiveau, string nomNiveau, float intervalleMAJ)
             : base(game)
          {
             Jeu = game;
             DimensionNiveau = dimensionNiveau;
             NomNiveau = nomNiveau;
             IntervalleMAJ = intervalleMAJ;
             LireLesDonnées();
          }
     
          public override void Initialize()
          {
             DimensionÉcran = new Vector2(Jeu.Window.ClientBounds.Width, Jeu.Window.ClientBounds.Height);
             TempsÉcouléDepuisMAJ = 0;
             TempsÉcouléDepuisMAJMobile = 0;
             base.Initialize();
          }
     
          private void LireLesDonnées()
          {
             StreamReader fichierLecture;
             TableauCaractèreDuNiveau = new Tuile[(int)DimensionNiveau.X, (int)DimensionNiveau.Y];
             Tuile[,] Tableau = new Tuile[(int)DimensionNiveau.X, (int)DimensionNiveau.Y];
             Tableau = TableauCaractèreDuNiveau;
     
             fichierLecture = new StreamReader(NomNiveau);
             for (int j = 0; j < DimensionNiveau.Y; j++)
             {
                for (int i = 0; i < DimensionNiveau.X; i++)
                {
                   MettreCharDansTableau(ref Tableau, fichierLecture, i, j, Jeu);
                   //if (TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture == 2)
                   //{
                   //    EstUnMur = true;
                   //}
                   //else
                   //{
                   //    EstUnMur = false;
                   //}
                }
             }
             TableauCaractèreDuNiveau = Tableau;
     
             fichierLecture.Close();
          }
     
     
          static void MettreCharDansTableau(ref Tuile[,] Tableau, StreamReader fichierLecture, int i, int j, Atelier Jeu)
          {
             char Caractère = Convert.ToChar(fichierLecture.Read());
             switch (Caractère)
             {
                case '0':
                   Tableau[i, j] = new Tuile(Jeu, 0, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Air);
                   break;
                case '1':
                   Tableau[i, j] = new Tuile(Jeu, 1, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Infranchissable);
                   break;
                case '2':
                   Tableau[i, j] = new Tuile(Jeu, 2, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), true, Color.White, Tuile.FonctionTuile.Sol);
                   break;
                case '3':
                   Tableau[i, j] = new Tuile(Jeu, 3, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Infranchissable);
                   break;
                case '4':
                   Tableau[i, j] = new Tuile(Jeu, 4, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Infranchissable);
                   break;
                case '5':
                   Tableau[i, j] = new Tuile(Jeu, 5, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Infranchissable);
                   break;
                case 'k':
                   Tableau[i, j] = new Tuile(Jeu, 56, new Vector2(LargeurTuileEnJeu * i, LargeurTuileEnJeu * j), false, Color.White, Tuile.FonctionTuile.Bougeant);
     
                   break;
                default:
                   MettreCharDansTableau(ref Tableau, fichierLecture, i, j, Jeu);
                   break;
             }
     
          }
     
     
     
     
          public override void Update(GameTime gameTime)
          {
             float TempsÉcoulé = (float)gameTime.ElapsedGameTime.TotalSeconds;
             float TempsÉcoulé2 = (float)gameTime.ElapsedGameTime.TotalSeconds;
             TempsÉcouléDepuisMAJ += TempsÉcoulé;
             if (TempsÉcouléDepuisMAJ >= IntervalleMAJ)
             {
                if (Jeu.Clétus.EstSurMarge)
                {
                   for (int j = 0; j < DimensionNiveau.Y; j++)
                   {
                      for (int i = 0; i < DimensionNiveau.X; i++)
                      {
                         TableauCaractèreDuNiveau[i, j].PositionAbsolue = TableauCaractèreDuNiveau[i, j].PositionAbsolue + new Vector2(Jeu.Clétus.Déplacement, 0);
                      }
                   }
                }
                TempsÉcouléDepuisMAJ -= IntervalleMAJ;
             }
             TempsÉcouléDepuisMAJMobile += TempsÉcoulé2;
             if (TempsÉcouléDepuisMAJMobile >= INTERVALLE_AFFICHAGE_MOBILE)
             {
                GérerPlateformeBougeante(gameTime);
                TempsÉcouléDepuisMAJMobile -= INTERVALLE_AFFICHAGE_MOBILE;
             }
     
             base.Update(gameTime);
          }
     
          private void GérerPlateformeBougeante(GameTime gametime)
          {
             float TempsÉcoulée = (float)gametime.TotalGameTime.TotalSeconds;
     
             for (int j = 0; j < DimensionNiveau.Y; j++)
             {
                for (int i = 0; i < DimensionNiveau.X; i++)
                {
                   if (TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture == 56)
                   {
                      if ((TempsÉcoulée % 10) < SECONDES_PLATEFORME_MOBILE_TYPE_1)
                      {
                         //TableauCaractèreDuNiveau[((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.X)/20, ((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.Y)/12].FonctionDeLaTuile = Tuile.FonctionTuile.Air;
                         TableauCaractèreDuNiveau[i, j].FonctionDeLaTuile = Tuile.FonctionTuile.Air;
                         TableauCaractèreDuNiveau[i, j].PositionAbsolue += new Vector2(VARIABLE_DÉPLACEMENT_, 0);
                         TableauCaractèreDuNiveau[i, j].FonctionDeLaTuile = Tuile.FonctionTuile.Bougeant;
                        // TableauCaractèreDuNiveau[((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.X) / 20, ((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.Y) / 12].FonctionDeLaTuile = Tuile.FonctionTuile.Bougeant;
                      }
                      else
                      {
                         TableauCaractèreDuNiveau[i, j].FonctionDeLaTuile = Tuile.FonctionTuile.Air;
                        // TableauCaractèreDuNiveau[((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.X) / 20, ((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.Y) / 12].FonctionDeLaTuile = Tuile.FonctionTuile.Air;
                         TableauCaractèreDuNiveau[i, j].PositionAbsolue -= new Vector2(VARIABLE_DÉPLACEMENT_, 0);
                         TableauCaractèreDuNiveau[i, j].FonctionDeLaTuile = Tuile.FonctionTuile.Bougeant;
                        // d TableauCaractèreDuNiveau[((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.X) / 20, ((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.Y) / 12].FonctionDeLaTuile = Tuile.FonctionTuile.Bougeant;
                      }
     
                   }
                }
             }
          }
          protected override void LoadContent()
          {
             SpriteSheetSol = Jeu.GestionnaireDeTextures.Find("SpriteSheetSol");
          }
          public override void Draw(GameTime gameTime)
          {
             for (int i = 0; i < DimensionNiveau.X; i++)
             {
                for (int j = 0; j < DimensionNiveau.Y; j++)
                {
                   Rectangle RectangleSource = default(Rectangle);
                   if (TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture >= 1 && TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture <= 78)
                   {
                      RectangleSource = new Rectangle((TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture - 1) * LargeurTuileSS, 0, LargeurTuileEnJeu, LargeurTuileEnJeu);
                      if (TableauCaractèreDuNiveau[i, j].IdentificationSorteDeTexture == 56)
                      {
                         RectangleSource = new Rectangle((1) * LargeurTuileSS, 0, LargeurTuileEnJeu, LargeurTuileEnJeu);
                      }
     
                   }
     
                   if (RectangleSource != default(Rectangle))//air!
                      Jeu.GestionSprites.Draw(SpriteSheetSol, new Rectangle((int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.X, (int)TableauCaractèreDuNiveau[i, j].PositionAbsolue.Y, 40, 40), RectangleSource, TableauCaractèreDuNiveau[i, j].Couleur);
                }
     
             }
     
             base.Draw(gameTime);
          }
       }
    Quelqu'un sait ce qu'est le problème ou si je m'y prend mal pour gérer le tableau?

  2. #2
    Nouveau candidat au Club
    Homme Profil pro
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Par défaut
    personne?

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Par défaut
    Citation Envoyé par alexalex14 Voir le message
    personne?
    Mon opinion à survoler ton code c'est qu'il pourrait être simplifié et que cette simplification a de bonnes chances de mettre en lumière ton bug.

    Je ne comprend pas en quoi le déplacement d'un objet doit travailler autant avec une carte.

    Pour moi, un objet a deux propriétés : X et Y. Quand il reçoit l'ordre de se déplacer, il demande à la carte de valider les nouvelles coordonnées et le cas échéant de renvoyer les caratéristique de la case. Sinon, l'objet ne se déplace pas.

    Dans une classe Carte, j'aurais une méthode qui validerais un X et un Y avec une requête simple en LINQ du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    from c in Carte.Cases where c.X = Coordonnee.X && c.Y = 
    Coordonnee.Y select c

Discussions similaires

  1. [Projet en cours] Projet jeu plateforme 2d avec moteur physique ?
    Par airman4 dans le forum Projets
    Réponses: 40
    Dernier message: 24/08/2011, 03h49
  2. réalisation d'un chat-jeu de plateforme 2d
    Par Dr Gang dans le forum Flash
    Réponses: 3
    Dernier message: 13/09/2006, 17h21
  3. Réponses: 4
    Dernier message: 02/08/2006, 19h02
  4. [FLASH MX2004] Correctif jeu de plateforme
    Par sourivore dans le forum Flash
    Réponses: 6
    Dernier message: 18/05/2006, 16h41

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