Brunaldo
Brunaldo

Reputation: 49

Texture2D is way oversized in XNA 4.0?

Right, I've added my track to the car game I'm going to make, now I'm attempting to add the car over the track, but when I load it, the car is wayyyy oversized. This is how it shows up when I debug...

http://oi42.tinypic.com/106hpxd.jpg

There's no errors or anything, but why is it so oversized? Please show me the re-edited code on how to fix it. Thank you!

Here's my coding;

public class Game1 : Microsoft.Xna.Framework.Game
{

    Texture2D background;
    Rectangle mainFrame;
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;
    Texture2D car1Texture;
    Vector2 car1Position = new Vector2(400f, 100f);

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



    /// <summary>
    /// Allows the game to perform any initialization it needs to before starting to run.
    /// This is where it can query for any required services and load any non-graphic
    /// related content.  Calling base.Initialize will enumerate through any components
    /// and initialize them as well.
    /// </summary>
    protected override void Initialize()
    {
        // TODO: Add your initialization logic here
        //Change the resolution to 800x600            
        graphics.PreferredBackBufferWidth = 1000;
        graphics.PreferredBackBufferHeight = 800;
        graphics.ApplyChanges();
        base.Initialize();
    }

    /// <summary>
    /// LoadContent will be called once per game and is the place to load
    /// all of your content.
    /// </summary>
    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures
        spriteBatch = new SpriteBatch(GraphicsDevice);
        // Load the background content.
        background = Content.Load<Texture2D>("roadscan");
        // Set the rectangle parameters
        mainFrame = new Rectangle(0, 0, GraphicsDevice.Viewport.Width, GraphicsDevice.Viewport.Height);

        spriteBatch = new SpriteBatch(GraphicsDevice);
        car1Texture = Content.Load<Texture2D>("car1");

    }


    // TODO: use this.Content to load your game content here


    /// <summary>
    /// UnloadContent will be called once per game and is the place to unload
    /// all content.
    /// </summary>
    protected override void UnloadContent()
    {
        // TODO: Unload any non ContentManager content here
    }

    /// <summary>
    /// Allows the game to run logic such as updating the world,
    /// checking for collisions, gathering input, and playing audio.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
            this.Exit();

        KeyboardState keyboard = Keyboard.GetState();
        GamePadState gamePad = GamePad.GetState(PlayerIndex.One);

        if (keyboard.IsKeyDown(Keys.Left) || gamePad.DPad.Left == ButtonState.Pressed)
        {
            car1Position.X -= 3f;
        }

        if (keyboard.IsKeyDown(Keys.Right) || gamePad.DPad.Right == ButtonState.Pressed)
        {
            car1Position.X += 3f;
        }

        if (keyboard.IsKeyDown(Keys.Up) || gamePad.DPad.Right == ButtonState.Pressed)
        {
            car1Position.Y += 3f;
        }

        if (keyboard.IsKeyDown(Keys.Down) || gamePad.DPad.Right == ButtonState.Pressed)
        {
            car1Position.Y -= 3f;
        }

        // TODO: Add your update logic here

        base.Update(gameTime);
    }

    /// <summary>
    /// This is called when the game should draw itself.
    /// </summary>
    /// <param name="gameTime">Provides a snapshot of timing values.</param>
    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);
        // Draw the background.


        // Start building the sprite.
        spriteBatch.Begin();
        // Draw the background.
        spriteBatch.Draw(background, mainFrame, Color.White);
        spriteBatch.Draw(car1Texture, mainFrame, Color.White);

        // End building the sprite.
        spriteBatch.End();


        // TODO: Add your drawing code here

        base.Draw(gameTime);
    }
}

Upvotes: 1

Views: 360

Answers (1)

PeterT
PeterT

Reputation: 8284

You are using

SpriteBatch.Draw (Texture2D, Rectangle, Color)

Which makes your car sprite take the position and size of the Rectangle. I would advise you to use the Version

SpriteBatch.Draw (Texture2D, Vector2, Color)

Whereas the Vector2 is the position of the Sprite. Look at MSDN for all the different versions.

So it would be:

spriteBatch.Draw(car1Texture, car1Position, Color.White);

Upvotes: 4

Related Questions