Quantcast
Channel: Community | MonoGame - Latest topics
Viewing all articles
Browse latest Browse all 6821

[SOLVED]Object reference not set to an instance, System.NullReferenceException

$
0
0

@OsenbaughJr wrote:

Hey,
In my program there is some bombs generating, but on start, after adding new one to list, it should set bomb's parameters but throws "Object reference not set to an instance" error. . After a long time I still cant figure out the mistake.
Below there's all of the relevant code.

Base class:

namespace Monogame_SprDeathRespawn
{
public class Game1 : Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;undefined> public static int screenWidth;
public static int screenHeight;
public static Random random;

    public List<SpriteClass> sprites= new List<SpriteClass>();
    public bool hasStarted= false;
    public Texture2D bombTexture;
    private float timer;
    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";

        screenHeight = graphics.PreferredBackBufferHeight;
        screenWidth = graphics.PreferredBackBufferHeight;
    }

    protected override void Initialize()
    {

        base.Initialize();
    }

    protected override void LoadContent()
    {
        spriteBatch = new SpriteBatch(GraphicsDevice);
        bombTexture = Content.Load<Texture2D>("bomb");

        Restart();
}

    private void Restart()
    {
        var playerTexture = Content.Load<Texture2D>("randomManSpr");

        sprites = new List<SpriteClass>
        {
            new Player(playerTexture) { position = new Vector2(screenWidth / 2 - playerTexture.Width / 2, screenHeight - playerTexture.Height),
            input = new Input() { left = Keys.A, right = Keys.D }, speed = 10f }
        };
        hasStarted = false; 
    }

    protected override void UnloadContent()
    {

    }

    protected override void Update(GameTime gameTime)
    {

        if (Keyboard.GetState().IsKeyDown(Keys.Space))
            hasStarted = true;

        if (hasStarted != true)
            return;

        timer += (float)gameTime.ElapsedGameTime.TotalSeconds;

        foreach (var sprite in sprites)
        {
            sprite.Update(gameTime, sprites);
        }

        if (timer > 0.25f)
        {
            timer = 0;

            sprites.Add(new Bomb(Content.Load<Texture2D>("bomb")));
        }

        for (int i = 0; i < sprites.Count; i++)
        {
            var sprite = sprites[i];
            if (sprite.isRemoved)
            {
                sprites.RemoveAt(i);
                i--;
            }
            if (sprite is Player)
            {
                var player = sprite as Player;
                if (player.hasDied)
                    Restart();
            }
        }

        base.Update(gameTime);
    }

    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();

        foreach (var sprite in sprites)
        {
            sprite.Draw(spriteBatch);
        }

        spriteBatch.End();

        base.Draw(gameTime);
    }
}

}

Sprite class:

namespace Monogame_SprDeathRespawn.Sprite
{
public class SpriteClass
{
protected Texture2D texture;

    public Vector2 position;
    public Vector2 velocity;
    public float speed;
    public Input input;
    public bool isRemoved = false;

    public Rectangle rectangle
    {
        get
        {
            return new Rectangle((int)position.X, (int)position.Y, texture.Width, texture.Height);
        }
    }

    public SpriteClass(Texture2D texture)
    {
        this.texture = texture;
    }

    public virtual void Update(GameTime gameTime, List<SpriteClass> sprites)
    {

    }

    public virtual void Draw(SpriteBatch spriteBatch)
    {
        spriteBatch.Draw(texture, position, Color.White);
    }
}

}

Bomb class derived from Sprite:

namespace Monogame_SprDeathRespawn.Sprite
{
class Bomb : SpriteClass
{
public Bomb(Texture2D texture)
: base(texture)
{
this.position = new Vector2(Game1.random.Next(0, Game1.screenWidth + texture.Width), -texture.Height); //throws "Object reference not set to an instance" exception
speed = Game1.random.Next(3, 10); //throws the exception if line above commented
}

    public override void Update(GameTime gameTime, List<SpriteClass> sprites)
    {
        position.Y += speed;

        if (rectangle.Bottom >= Game1.screenHeight)
            isRemoved = true;
    }
}

}

Thanks for helping.

Posts: 3

Participants: 2

Read full topic


Viewing all articles
Browse latest Browse all 6821

Trending Articles