XNA - Attempting to load textures in another class always gives GraphicsDevice component not found

StackOverflow https://stackoverflow.com/questions/18149511

  •  24-06-2022
  •  | 
  •  

Question

I have read many different solutions to problems similar to this but I cannot find a solution that works for me.

I am just starting on making a simple game to learn the basics of XNA, but I cannot get textures to load in an additional class. I tried this:

EDIT: This is not the main class incase I didn't make that clear enough

class Wizard
{
    // Variables
    Texture2D wizardTexture;
    GraphicsDeviceManager graphics; // I added this line in later, but it didn't seem to do anything

    public Wizard(ContentManager content, GraphicsDeviceManager graphics)
    {
        this.graphics = graphics;
        Content.RootDirectory = "Content";
        LoadContent();
    }

    protected override void LoadContent()
    {
        wizardTexture = Content.Load<Texture2D>("Wizard"); // Error is here
        base.LoadContent();
    }

I have also tried making a method like

public Texture2D Load(ContentManager Content)
{
     return Content.Load<Texture2D>("Wizard");
}

And then have wizardTexture = Load(Content); but that did not work either.

Any help and an explanation is appreciated, thanks

Was it helpful?

Solution

That's not the usual constructor for an xna game... it seems that you are using a hack to let using the game class in a winform... if you want to use that way... you are passing wrong the parameteres or your not creating right the graphicsdevicemanager

The usual way to create a xna game is defining this two files:

 // program.cs file
 static class Program
    {
        static void Main(string[] args)
        {
            using (Game1 game = new Game1())
            {
                game.Run();
            }
        }
    }


 // Game1.cs file
 public class Game1 : Microsoft.Xna.Framework.Game {
    GraphicsDeviceManager graphics;

    public Game1( ) {
        graphics = new GraphicsDeviceManager( this );
        Content.RootDirectory = "Content";
    }
    ....
 }

You should realize that the game constructor has no parameters, and the graphicsdevicemanager its created inside the constructor

EDIT: I was thinking that maybe your wizard class its not intended to be a game, but a GameComponent or DrawableGameComponent, in this case it should be:

class Wizard : DrawableGameComponent {
    Texture2D wizardTexture;

    public Wizard(Game game) : base(game)
    {
    }

    protected override void LoadContent()
    {
       wizardTexture = Content.Load<Texture2D>("Wizard"); // Error is here
        base.LoadContent();
    }
    ....
}

Then in you main game class when you initialize the object... you can add add it to the Components collection.

 class Game1: Game {
    ....
    public override void Initialize() {

        Components.Add( new Wizard(this));
    }
 }

OTHER TIPS

Works in this way

texture = Game.Content.Load<Texture2D>(textureName); 
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top