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

XNA/Monogame Discussion :

obtenir une texture2d à partir d'un objet Image ou Bitmap


Sujet :

XNA/Monogame

  1. #21
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    j'ai remodifé afin d'avoir une structure un peu plus propre. Le chargement de la texture dynamiquement se passe correctement. Mais lorsque lors du chargement je force afin d'afficher ma carte avec un tile particulier sur une zone de l'écran, mon problème persiste à la fermeture de mon formulaire...

    (sans parler du fait que mon tile ne s'affiche pas)

    De plus j'ai utilisé la méthode qui créer un formulaire depuis la classe Game que j'ai vu sur un autre tuto...

    Bref, j'utilise différente méthode pour un résultat identifique avec cette histoire de mémoire. Je suis assez perplexe

    EDIT:
    Par contre, en forcant l'utilisation d'une texture dans le content. Je n'ai pas d'erreur mémoire à la fermeture. Mais l'affichage ne fonctionne pas mieux .

    J'utilise cette méthode pour l'affichage :
    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
            protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
     
                // TODO: Add your drawing code here
                this.spriteBatch.Begin();
                var vp = this.GraphicsDevice.Viewport;
     
                Moteur.DessinerLesCalques(spriteBatch, true, false, false);
     
     
                this.spriteBatch.End();
     
                base.Draw(gameTime);
            }
    Moteur c'est une classe statique sur lequel je charge une map.

    Et voici La méthode dessinerLesCalques si cela peut vous aider :
    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
            public static void DessinerLesCalques(SpriteBatch spriteBatch, bool affichageCalqueBasique, bool affichageCalqueObjet, bool affichageAutreCalque)
            {
                if (map != null)
                {
                    if (spriteBatch == null)
                        throw new ArgumentNullException("Aucun spriteBatch défini");
     
                    if (!affichageAutreCalque && !affichageCalqueBasique && !affichageCalqueObjet)
                        return;
     
                    Rectangle destinationRectangle = new Rectangle(0, 0, map.TailleTile.X, map.TailleTile.Y);
     
                    for (int y = 0; y < map.TailleCarte.Y; y++)
                    {
                        for (int x = 0; x < map.TailleCarte.X; x++)
                        {
                            destinationRectangle.X = (int)mapOrignPosition.X + x * map.TailleTile.X;
                            destinationRectangle.Y = (int)mapOrignPosition.Y + y * map.TailleTile.Y;
     
                            if (EstCeVisible(destinationRectangle))
                            {
                                Point mapPosition = new Point(x, y);
                                if (affichageCalqueBasique)
                                {
                                    Rectangle sourceRectangle = map.GetRectangleTile_CalqueBasique_SelonPosition(mapPosition);
                                    if (sourceRectangle != Rectangle.Empty)
                                        spriteBatch.Draw(map.TextureCarte, destinationRectangle, sourceRectangle, Color.White);
                                }
     
                                if (affichageAutreCalque)
                                {
                                    //Rectangle sourceRectangle = map.
                                }
     
                                if (affichageCalqueObjet)
                                {
                                    //
                                }
                            }
                        }
                    }
                }
            }
    Merci d'avance
    Mon blog est sur https://arphonis.fr et bientôt d'autres fonctionnalités seront disponible dessus.

  2. #22
    Membre habitué
    Homme Profil pro
    Ingénieur Informatique
    Inscrit en
    Décembre 2005
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur Informatique

    Informations forums :
    Inscription : Décembre 2005
    Messages : 146
    Points : 158
    Points
    158
    Par défaut
    Et bien je vais me répondre à moi même hehehe.

    J'ai reprise le kit rpg en exemple, en réutilisant leur gestion avec la classe ScreenManager et leur classe abstraite GameScreen.

    Via cette méthode, j'ai pu afficher un sprite correctement qui était chargé en dur lors de la construction de ma form. Chose que je ne parvenais pas non plus à faire jusqu'à maintenant. Mais à la fermeture j'avais toujours l'erreur de mémoire partagé.

    J'ai alors regardé ma manière de procéder lors de l'import de ma texture. Et j'ai constaté que mon initialisation n'était pas bonne.

    je faisais un :
    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
    PresentationParameters pp = new PresentationParameters();
                pp.BackBufferCount = 1;
                pp.IsFullScreen = false;
                pp.SwapEffect = SwapEffect.Discard;
                pp.BackBufferWidth = this.Width;
                pp.BackBufferHeight = this.Height;
     
                pp.AutoDepthStencilFormat = DepthFormat.Depth24Stencil8;
                pp.EnableAutoDepthStencil = true;
                pp.PresentationInterval = PresentInterval.Default;
                pp.BackBufferFormat = SurfaceFormat.Unknown;
                pp.MultiSampleType = MultiSampleType.None;
     
                GraphicsDevice device = new GraphicsDevice(
                        GraphicsAdapter.DefaultAdapter,
                        DeviceType.Hardware,
                        this.Handle,
                        pp);
    Ce qui me recréer un device, qui était déjà initialiser auparavant. Il m'a suffit de fournir en paramétre à ma boite de dialogue me permettant d'importer ma texture mon objet device récupérer via le screenManager pour avoir un seul et même objet. Et pas deux objet pointant sur les mêmes ressources...

    Du coup, j'ai résolu mes deux problèmes qui n'en était qu'un seul finalement.

    Par contre, je ne comprends pas que je sois obliger d'utiliser la structure ScreenManager et GameScreen du kit rpg pour récupérer mon device correctement.

    Lors de la construction de ma classe game, ce paramétre est null. Mais via l'utilisation de ces deux objets de la même manière que sur le kit, mon objet est bien instancié...

    Je vais enquêter en de plus prés sur leur fonctionnement, pour comprendre ce que je ne comprends pas encore actuellement.

    En tout cas, merci pour ceux qui ont apporté leur aide pour tenter de trouver l'erreur
    Mon blog est sur https://arphonis.fr et bientôt d'autres fonctionnalités seront disponible dessus.

  3. #23
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Ravi que tu es pu corriger ton problème !

    Si tu pouvais mettre les résultat de ton "enquête", cela m'intéresse.

    En tout cas bonne continuation !

  4. #24
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 155
    Points : 94
    Points
    94
    Par défaut FromFile.
    Si tu cherches un acces direct depuis un fichier, il y a Texture2D.FromFile:
    http://msdn.microsoft.com/en-us/libr....fromfile.aspx

    .Rudolf.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/08/2011, 19h36
  2. [c#] chargement d'une texture a partir d'un objet Image
    Par elguignardo dans le forum DirectX
    Réponses: 2
    Dernier message: 29/03/2006, 09h18
  3. Obtenir une chaîne à partir d'une énumération
    Par zidenne dans le forum Langage
    Réponses: 1
    Dernier message: 12/11/2005, 10h39
  4. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40
  5. Réponses: 17
    Dernier message: 04/04/2005, 17h50

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