Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs de jeux vidéo > XNA
XNA Forum d'entraide sur le développement avec XNA
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 01/03/2012, 10h11   #1
makn0
Invité de passage
 
Inscription : 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.
makn0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2012, 11h31   #2
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 448
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 : 448
Points : 693
Points : 693
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/
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2012, 11h35   #3
makn0
Invité de passage
 
Inscription : novembre 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 12
Points : 3
Points : 3
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.
makn0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/03/2012, 18h13   #4
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 448
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 : 448
Points : 693
Points : 693
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/
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2012, 08h25   #5
makn0
Invité de passage
 
Inscription : novembre 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 12
Points : 3
Points : 3
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 !
makn0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2012, 09h05   #6
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 448
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 : 448
Points : 693
Points : 693
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/
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2012, 10h02   #7
makn0
Invité de passage
 
Inscription : novembre 2009
Messages : 12
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 12
Points : 3
Points : 3
Tu as complétement raison, quand j'ai rédigé ma dernière réponse j'y ai pensé.

Merci de tes réponses.
makn0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h07.


 
 
 
 
Partenaires

Hébergement Web