2011-11-22 64 views
1

对,我已经将自己的赛道添加到了我将要制作的赛车游戏中,现在我试图将赛车添加到赛道上,但是当我加载它时,赛车会变得超大。这是怎么显示出来,当我调试...Texture2D在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); 
    } 
} 

回答

4

您正在使用

SpriteBatch.Draw (Texture2D, Rectangle, Color) 

,让您的汽车的精灵走Rectangle的位置和大小。我建议你使用版本

SpriteBatch.Draw (Texture2D, Vector2, Color) 

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

因此,这将是:

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

你的问题就在这里:

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

您已经定义仪器的主机“是在屏幕的大小,所以你的车被拉伸到屏幕的大小。用'mainFrame'代替'car1Position',一切都应该运行得更顺利。