Ndr Krty
Ndr Krty

Reputation: 3

I am getting a null error

I am getting an error message in this line:

player = new Player(this.Content.Load<Texture2D>("Player"),
                    actor.position, 
                    this.spriteBatch, 
                    enemyManager);

which tells me the actor object is null. How can I overcome this situation?

The exact error is:

Field Shmup.MyGame.actor is never assigned to, and will always have its default value null.

Here is my code:

class MyGame // [edit:] added based on below constructor
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Player player;
    EnemyManager enemyManager;
    Actor actor;

    public MyGame()
    {
        graphics = new GraphicsDeviceManager(this);
        IsMouseVisible = true;
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {
        // TODO: Add your initialization logic here
        base.Initialize();
    }

    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);
        startTheGame(); 
    }

    protected override void UnloadContent()
    {
        // TODO: Unload any non ContentManager content here
    }

    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
        {
            this.Exit();
        }

        this.player.Update(gameTime);
        this.enemyManager.Update(gameTime);

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.Maroon);
        this.spriteBatch.Begin();
        this.player.Draw(gameTime);
        this.enemyManager.Draw(gameTime);
        this.spriteBatch.End(); 
        base.Draw(gameTime);
    }

    void startTheGame()
    {
        enemyManager = new EnemyManager(this.Content.Load<Texture2D>("Enemy"), new Vector2(16), this.spriteBatch);
        player = new Player(this.Content.Load<Texture2D>("Player"),actor.position, this.spriteBatch, enemyManager);
        enemyManager.StartTheGame(10);
    }
}

public class Actor
{
   public Texture2D texture;
   public Vector2 origin;
   public SpriteBatch spriteBatch;
   public Vector2 position;
   public Rectangle boundingRectangle;

    public Vector2 Position
    {
         get { return position; }
         set 
         { 
             position = value;
             boundingRectangle = new Rectangle((Int32)(position.X - origin.X), (Int32)(position.Y - origin.Y), texture.Width, texture.Height);
         }
    }        

    public Rectangle BoundingRectangle
    {
        get { return boundingRectangle; }
    }

    public Actor(Texture2D texture, Vector2 origin, SpriteBatch spriteBatch, Vector2 initialPosition)
    {
        this.texture = texture;
        this.origin = origin;
        this.spriteBatch = spriteBatch;
        this.position = initialPosition;

        boundingRectangle = new Rectangle((Int32)(initialPosition.X - origin.X), (Int32)(initialPosition.Y - origin.Y), texture.Width, texture.Height);
    }

    public virtual void Update(GameTime gameTime)
    { }

    public virtual void Draw(GameTime gameTime)
    {
        this.spriteBatch.Draw(texture, position - origin, Color.White);
    }
}

Upvotes: 0

Views: 215

Answers (1)

PepeDeLew
PepeDeLew

Reputation: 346

Like error says, you need to create an instance of Actor class.

In game constructor or in startTheGame Method(before creating an instance of Player class) you should create an instance of Actor class, something like :

this.actor = new Actor(variables...);

Upvotes: 1

Related Questions