none
XNA NullReferenceException RRS feed

  • Question

  • Bonjour,

     

    Encore moi :), alors voila, je suis en XNA et j'ai créer une  classe nommé "Character" et je l'ai mise en "DrawableGameComponents", alors voila mon code :

     

     

    public class Character : Microsoft.Xna.Framework.DrawableGameComponent
        {
            ContentManager Content;
            SpriteBatch spriteBatch;
            Texture2D avatar;
    
            public Character(Game game)
                : base(game)
            {
                spriteBatch = (SpriteBatch)Game.Services.GetService(typeof(SpriteBatch));
                Content = (ContentManager)Game.Services.GetService(typeof(ContentManager));
    
                LoadContent();
            }
    
            public override void Initialize()
            {
                base.Initialize();
            }
    
            protected override void LoadContent()
            {
                base.LoadContent();
                avatar = Content.Load<Texture2D>("Player1");
            }
    
            public override void Draw(Microsoft.Xna.Framework.GameTime gameTime)
            {
                spriteBatch.Begin();
                spriteBatch.Draw(avatar, new Vector2(100, 100), Color.White);
                spriteBatch.End();
    
                base.Draw(gameTime);
            }
        }
    

     

    et j'obtiens "NullReferenceException" au avatar et au spriteBatch, lorsque je l'appelle de Game1.cs :

    protected override void LoadContent()
            {
                spriteBatch = new SpriteBatch(GraphicsDevice);
    
                character = new Character(this);
                Components.Add(character);
            }


     

    Je ne sais vraiment comment faire, si vous pouviez m'aider :) ça fait plusieurs heure que je travail la dessus depuis plusieurs heure.

     

    Merci d'avance :)

     

    Édouard


    Cordiallement Édouard
    • Modifié Édouard dimanche 5 février 2012 21:37
    dimanche 5 février 2012 21:36

Réponses

  • Bonjour,

    Il manque probablement les appels à Game.Services.AddService qui vont enregistrer les services que l'on va ensuite utiliser en les récupérant via GetService(). Par exemple dans LoadContent on crée le "service" spriteBatch mais on ne l'utilise pas. Il devrait faire l'objet d'un appel à AddService...

     

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Édouard lundi 6 février 2012 21:42
    lundi 6 février 2012 11:56
    Modérateur

Toutes les réponses

  • Bonjour Edouard, 

    Le NullReferenceException doit probablement venir du fait que Content est null (à vérifier avec le debugger).

    J'ai remarqué que dans le constructeur vous faites : Game.Services.GetService(), et donc sans utiliser l'objet passé en paramètre.

    Essayez avec :

    spriteBatch = (SpriteBatch)game.Services.GetService(typeof(SpriteBatch));
    Content = (ContentManager)game.Services.GetService(typeof(ContentManager));
    


     


    • Modifié Yohan D lundi 6 février 2012 08:22
    lundi 6 février 2012 08:21
  • Bonjour,

    Il manque probablement les appels à Game.Services.AddService qui vont enregistrer les services que l'on va ensuite utiliser en les récupérant via GetService(). Par exemple dans LoadContent on crée le "service" spriteBatch mais on ne l'utilise pas. Il devrait faire l'objet d'un appel à AddService...

     

     

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    • Marqué comme réponse Édouard lundi 6 février 2012 21:42
    lundi 6 février 2012 11:56
    Modérateur
  • Merci Patrice, en effet j'ai ajouté :

                Services.AddService(typeof(SpriteBatch), spriteBatch);

                Services.AddService(typeof(ContentManager), Content);

     

    Et ça a marcher, merci !  


    Cordiallement Édouard
    lundi 6 février 2012 21:43