Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 7 sur 7
  1. #1
    Invité de passage
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 3
    Points
    3

    Par défaut Génération de sprite dynamic en XNA C#

    Bonjour à tous,
    voici ce que j'utilise :
    - une résolution 800*600
    - des sprites ( couleurs différentes ) de 40*40 ( 6 sprites en tout )
    mon but est le suivant :
    Afficher un sprite tous les 40 pixels ( une fois arrivé a 20 on saute une ligne )
    800/40 = 20.
    L'algo n'est pas vraiment un problème par contre, je n'arrive pas à appréhender le fait que je dois jongler entre la méthode LoadContent et la méthode Draw().
    Afficher un sprite et le faire bouger n'est pas un problème.

    J'aimerai avoir votre avis sur la question, comme vous envisagez ça.

    J'utilise cette fonction pour récup les noms des fichiers.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private List<string> SpriteList()
            {
                string[] filePaths = Directory.GetFiles(@"gfx/", "*.png");
                List<string> listFichier = new List<string>();
                for (int n = 0; n <= filePaths.Length - 1; n++)
                {
                    listFichier.Add(Path.GetFileNameWithoutExtension(filePaths[n]));
                }
    return listFichier;
            }
    Voilà ma fonction LoadContent
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     protected override void LoadContent()
            {
                // Create a new SpriteBatch, which can be used to draw textures.
                spriteBatch = new SpriteBatch(GraphicsDevice);  
                // TODO: use this.Content to load your game content here
                foreach (string monSprite in listesprite)
                {
                    sprite = Content.Load<Texture2D>("gfx\\" + monSprite);
                }
     
            }
    Voila ma fonction Draw
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
     
                // TODO: Add your drawing code here
                spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
                foreach ( string monSprite in listesprite )
                {
                    spriteBatch.Draw(sprite, rec, Color.White);
             // l'idée serai d'incrementer le rec.X, un truc du style rec.X = rec.X +40;
     
                }
                spriteBatch.End();
                base.Draw(gameTime);
            }
    Encore une fois l'algo n'est pas en cause, c'est la structure que je n'arrive pas à visualiser ( je suis un newbie en xna ).

    Si qq'un pourrait me tendre la main ça serait sympa !

    Merci pour vos réponses futures.

  2. #2
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 733
    Points : 1 317
    Points
    1 317

    Par défaut

    Code :
    1
    2
    3
    4
          foreach ( string monSprite in listesprite )
                {
                    spriteBatch.Draw(sprite, rec, Color.White);
                   }
    Je suppose que ça ne compile pas....

    Je comprends ce que tu veux faire, mais absolument pas où tu bloques ; je ne peux donc pas vraiment t'aider.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  3. #3
    Invité de passage
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 3
    Points
    3

    Par défaut

    Tout d'abord merci pour ta réponse.
    Ca compile mais le problème est que le même sprite est utilisé, donc il s'affiche en rapide tous les 40 pixels! et disparait (logique pas de condition d'arret ).

    Le problème qui me bloque est la construction dynamique d'un sprite (texture, coordonée) dans un for ( ou foreach ) dans la méthode draw.

    ça serait déja un bon début pour moi. Si je ne suis pas très clair, fais le moi savoir j'essaierai de détailler plus.

  4. #4
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 733
    Points : 1 317
    Points
    1 317

    Par défaut

    Oh effectivement ça compile mais ça ne fait pas grand chose à part afficher X fois le MEME sprite au même endroit.

    Ce n'est pas un problème de XNA que tu as là mais plutôt de logique.

    Code :
    sprite = Content.Load<Texture2D>("gfx\\" + monSprite);
    Tu es conscient qu'ici au final tu ne charges que la dernière image du dossier dans ta variable sprite ?
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  5. #5
    Invité de passage
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 3
    Points
    3

    Par défaut

    Oui effectivement, en fait j'arrive pas à appréhender la structure pour le faire en dynamique.
    style :
    Code :
    1
    2
    3
    4
     
    for(int i ....) {
    sprite + i = Content.Load<Texture2D>("gfx\\" + monSprite);
    }
    Pour charger chaque sprite dans une variable.
    Sans le faire manuellement style :
    sprite_un = Content.Load etc...
    sprite_deux = Content.Load etc...
    Si tu peux m'aiguiller ça serait !

  6. #6
    Membre Expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    février 2006
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : février 2006
    Messages : 733
    Points : 1 317
    Points
    1 317

    Par défaut

    Tu ne procèdes pas déjà de manière similaire ici ?


    Code :
    1
    2
    3
    4
    5
    6
    string[] filePaths = Directory.GetFiles(@"gfx/", "*.png");
    List<string> listFichier = new List<string>();
    for (int n = 0; n <= filePaths.Length - 1; n++)
    {
         listFichier.Add(Path.GetFileNameWithoutExtension(filePaths[n]));
    }
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  7. #7
    Invité de passage
    Inscrit en
    novembre 2009
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 12
    Points : 3
    Points
    3

    Par défaut

    Tu as complétement raison, quand j'ai rédigé ma dernière réponse j'y ai pensé.

    Merci de tes réponses.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •