Texture2D在XNA 4.0中超大尺寸?

时间:2011-11-22 01:06:27

标签: xna-4.0

是的,我已将我的赛道添加到我将要制作的赛车游戏中,现在我正试图将赛车添加到赛道上,但是当我加载赛车时,赛车的尺寸太大了。这是我调试时的显示方式......

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

没有错误或任何东西,但为什么它如此超大?请告诉我重新编辑的代码,了解如何修复它。谢谢!

这是我的编码;

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);
    }
}

2 个答案:

答案 0 :(得分:4)

您正在使用

SpriteBatch.Draw (Texture2D, Rectangle, Color)

这使您的汽车精灵占据Rectangle的位置和大小。我建议你使用版本

SpriteBatch.Draw (Texture2D, Vector2, Color)

Vector2是Sprite的位置。查看所有不同版本的MSDN

所以它会是:

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

答案 1 :(得分:0)

你的问题在于:

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

您已将'mainFrame'定义为屏幕大小,因此您的汽车会拉伸到屏幕大小。将'mainFrame'替换为'car1Position',一切都应该运行得更顺畅。