Texture2D ist in XNA 4.0 viel zu groß

  • Richtig, ich habe meine Spur zum Auto-Spiel hinzugefügt, das ich machen werde. Jetzt versuche ich, das Auto über die Spur zu legen, aber wenn ich es lade, ist es das Auto viel zu groß. So wird es beim Debuggen angezeigt ...

    Texture2D ist in XNA 4.0 viel zu groß

    Es gibt keine Fehler oder irgendetwas, aber warum? es so übergroß? Bitte zeigen Sie mir den überarbeiteten Code, wie er behoben werden kann. Vielen Dank!

    Hier ist meine Kodierung:

     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);
        }
    }
     
    22 November 2011
    SamLex
2 answers
  • Sie verwenden

     SpriteBatch.Draw (Texture2D, Rectangle, Color)
     

    Dadurch wird Ihr Auto-Sprite die Position und Größe des Rectangle. Ich würde Ihnen raten, die Version zu verwenden

     SpriteBatch.Draw (Texture2D, Vector2, Color)
     

    Während Vector2 die Position des Sprites ist. Siehe MSDN für alle verschiedenen Versionen.

    Es wäre also:

     spriteBatch.Draw(car1Texture, car1Position, Color.White);
     
    22 November 2011
    PeterT
  • Ihr Problem liegt hier:

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

    Sie haben 'mainFrame' als den definiert Größe des Bildschirms, dadurch wird Ihr Auto auf die Größe des Bildschirms gestreckt. Ersetzen Sie 'main1' durch 'car1Position' und alles sollte reibungsloser laufen.

    14 June 2013
    Pharap