2012-05-13 2 views
0

У меня есть этот код, который должен нарисовать два значка тома в окне, но он не работает. Вот соответствующий код:XNA не рисует то, что я рассказываю

Texture2D vol_max; 
    Vector2 vol_max_vect; 
    Texture2D vol_min; 
    Vector2 vol_min_vect; 
    ... 
    protected override void LoadContent() 
    { 
     // Create a new SpriteBatch, which can be used to draw textures. 
     spriteBatch = new SpriteBatch(GraphicsDevice); 

     vol_max = Content.Load<Texture2D>("[email protected]"); 
     vol_min = Content.Load<Texture2D>("[email protected]"); 
    } 
    protected override void Update(GameTime gameTime) 
    { 
     thisKeyboard = Keyboard.GetState(PlayerIndex.One); 

     if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed || 
      thisKeyboard.IsKeyDown(Keys.Escape)) 
     { 
      this.Exit(); 
     } 

     // Update window vectors 
     vol_max_vect = new Vector2(
      (float)(Window.ClientBounds.Right - 20), 
      (float)(Window.ClientBounds.Bottom - 20)); 
     vol_min_vect = new Vector2(
      (float)(Window.ClientBounds.Right - 140), 
      (float)(Window.ClientBounds.Bottom - 20)); 

     prevKeyboard = thisKeyboard; 

     base.Update(gameTime); 
    } 

    protected override void Draw(GameTime gameTime) 
    { 
     GraphicsDevice.Clear(Color.CornflowerBlue); 

     spriteBatch.Begin(); 
     spriteBatch.Draw(
      vol_max, 
      vol_max_vect, 
      Color.White); 
     spriteBatch.Draw(
      vol_min, 
      vol_min_vect, 
      Color.White); 
     spriteBatch.End(); 

     base.Draw(gameTime); 
    } 

ответ

2

Вопрос заключается в том, что ClientBounds.Right/Bottom в координатах экрана Windows (где [0,0] является верхней левой части экрана, а нижний правый ваше разрешение , например [1024, 768]).

Что вы действительно хотите, это нарисовать их в правом нижнем углу вашего собственного окна. XSL SpriteBatch рисует в координатах видового экрана, где [0, 0] находится в верхней левой части окна просмотра, а нижний правый - это разрешение вашего приложения, например. [800, 480]. Чтобы получить эту ширину, вы можете просто использовать Window.ClientBounds.Width вместо Window.ClientBounds.Right и Window.ClientBounds.Height вместо Window.ClientBounds.Bottom.

Надеюсь, это поможет!

+0

Да, это сработало! Благодаря! –

Смежные вопросы