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 :

Classe gérant les textures et les textes


Sujet :

XNA/Monogame

  1. #1
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 47
    Points
    47
    Par défaut Classe gérant les textures et les textes
    Salut,

    Je présente aujourd'hui une classe que j'ai fait pour pouvoir afficher une image avec du texte au dessus facilement. Ce n'est pas très dur à faire, mon but est donc de le publier ainsi aider d'autres.

    Voici le code de la classe qui s'appelle ImageWithTexte:
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;
     
    namespace WindowsGame10
    {
        class ImageWithTexte
        {
            Vector2 positionImage;
            Texture2D texture;
            SpriteFont Font;
            float textePosX;
            float textePosY;
            Vector2 textePosition;
            string Text;
            string ImageName;
            float ImagePositionX;
            float ImagePositionY;
     
            public ImageWithTexte(string Text, float ImagePositionX, float ImagePositionY)
            {
     
     
                positionImage = new Vector2(this.ImagePositionX = ImagePositionX, this.ImagePositionY = ImagePositionY);
                textePosition = new Vector2(textePosX = ImagePositionX, textePosY = ImagePositionY - 25);
     
                ImagePositionX = positionImage.X;
                ImagePositionY = positionImage.Y;
     
                this.Text = Text;
            }
     
            public void Loads(ContentManager content, string FontName, string ImageName)
            {
                this.ImageName = ImageName;
     
                Font = content.Load<SpriteFont>(FontName);
                texture = content.Load <Texture2D>(ImageName);
            }
     
            public void Draw(SpriteBatch spriteBatch)
            {
                spriteBatch.Begin();
                spriteBatch.Draw(texture, positionImage, Color.White);
                spriteBatch.DrawString(Font, Text, textePosition, Color.White);
                spriteBatch.End();
            }
        }
    }


    Ensuite, voilà le code qui permet de l'utiliser:
    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
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using Microsoft.Xna.Framework;
    using Microsoft.Xna.Framework.Audio;
    using Microsoft.Xna.Framework.Content;
    using Microsoft.Xna.Framework.GamerServices;
    using Microsoft.Xna.Framework.Graphics;
    using Microsoft.Xna.Framework.Input;
    using Microsoft.Xna.Framework.Media;
    using Microsoft.Xna.Framework.Net;
    using Microsoft.Xna.Framework.Storage;
    using WindowsGame10;
     
    namespace WindowsGame11
    {
        public class Game1 : Microsoft.Xna.Framework.Game
        {
            GraphicsDeviceManager graphics;
            SpriteBatch spriteBatch;
     
            ImageWithTexte image; //On déclare la classe.
     
            public Game1()
            {
                graphics = new GraphicsDeviceManager(this);
                Content.RootDirectory = "Content";
                image = new ImageWithTexte("the text is me", 50, 100); //On assigne le texte, et les positions X et Y de l'image sur la fenêtre.
                this.graphics.PreferredBackBufferHeight = 300; //Taille de la fenêtre.
                this.graphics.PreferredBackBufferWidth = 300; //Taille de la fenêtre.
            }
     
            protected override void Initialize()
            {
                base.Initialize();
            }
     
            protected override void LoadContent()
            {
     
                spriteBatch = new SpriteBatch(GraphicsDevice);
                image.Loads(Content, "Font", "Torshid"); //Le nom du ContentManager utilisé, le nom du fichier SpriteFont et le nom de l'image se situant dans le ContentManager.
     
            }
     
            protected override void UnloadContent()
            {
            }
     
            protected override void Update(GameTime gameTime)
            {
                base.Update(gameTime);
            }
     
            protected override void Draw(GameTime gameTime)
            {
                GraphicsDevice.Clear(Color.CornflowerBlue);
                image.Draw(spriteBatch); //On dessine l'image et le texte qui se trouve au dessus.
                base.Draw(gameTime);
            }
     
        }
    }

    La position du texte n'est modifiable ici que par la classe. Avec peu de modifications, il est possible d'afficher le texte au milieu de l'image (je ne parle que de l'axe X) et de modifier la position en dehors de la classe.

    Comme ça qu'on affiche les pseudos des joueurs dans un jeu 2D.

    Bon bah voilà, en espérant que ça aide certaines personnes!


    P.S.: Je sais que le code est un peu foutu.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Si c'est pour un ajout dans notre section de code source ( XNA ), je ne vois pas vraiment ce qu'il a de particulier, vous faites simplement le draw du texte après celui de l'image.

    Sinon dans les améliorations, pour le voir "utile" ici, c'est:
    - Traduire les commentaires en français, et si possible ( et c'est possible ) enlever les ToDo, et autre commentaire fait par VS pour des commentaires plus éloquents
    - Enlever les using qui sont inutile car ça, perso, je déteste
    - Les positions, à la place d'avoir deux variables ( X, Y ), on peut utiliser des Vector2
    D'ailleurs vous semblez avoir deux fois, les mêmes variables
    -Pour plus de sécurité, il serai superbe d'avoir un code qui empeche le draw de s'executer avant le Loads


    Voilà
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Étudiant
    Inscrit en
    Juin 2010
    Messages
    73
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2010
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Salut,

    Il n'y a pas de section pour les codes XNA open-source non? Je ne vois que SDL, DirectX et OpenGL.

    Sinon comme j'ai dit, je sais que c'est basique mais c'est juste pour montrer la manière de procéder à des personnes qui débutent sous XNA et qui font un tour ici. J'ai effacé des choses inutiles et les commentaires.

    Merci sinon d'avoir poster ce message pour l'améliorer.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 062
    Points
    219 062
    Billets dans le blog
    120
    Par défaut
    Pour une section code, en demandant aux bonnes personnes, on peut s'arranger
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 36
    Points : 20
    Points
    20
    Par défaut
    Ah intéressant car je ne savais pas comment téléverser mes textures à partir de la classe elle-même.

Discussions similaires

  1. les methodes et les associations entre les classes
    Par zin_rbt dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 24/05/2010, 14h41
  2. Réponses: 4
    Dernier message: 11/09/2006, 16h55
  3. Les polices dans les tables et les requêts
    Par zooffy dans le forum Access
    Réponses: 3
    Dernier message: 21/06/2006, 11h06

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