Texture2D слишком большой в XNA 4.0? - PullRequest
1 голос
/ 22 ноября 2011

Правильно, я добавил свой трек в автомобильную игру, которую собираюсь сделать, теперь я пытаюсь добавить автомобиль поверх трека, но когда я загружаю его, машина становится слишком большой.Вот как это проявляется, когда я отлаживаюсь ...

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 ]

4 голосов
/ 22 ноября 2011

Вы используете

SpriteBatch.Draw (Texture2D, Rectangle, Color)

Что заставляет ваш автомобильный спрайт занять позицию и размер Rectangle. Я бы посоветовал вам использовать версию

SpriteBatch.Draw (Texture2D, Vector2, Color)

В то время как Vector2 - это позиция Спрайта. Посмотрите на MSDN для всех различных версий.

Так было бы:

spriteBatch.Draw(car1Texture, car1Position, Color.White);
0 голосов
/ 14 июня 2013

Ваша проблема заключается в следующем:

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

Вы определили 'mainFrame' как размер экрана, поэтому ваша машина растянута до размера экрана.Замените «mainFrame» на «car1Position», и все должно работать более плавно.

...