2012-05-13 8 views
0

2つのボリュームアイコンをウィンドウに描画するはずのこのコードはありますが、動作しません。ここに関連するコードは次のとおりです。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 /ボトムは、Windowsのスクリーン座標であるということである([0,0]画面の左上で、右下があなたの解像度です例えば、[1024,768])。

あなたが本当に望むのは、自分のウィンドウの右下に描画することです。 XNAのSpriteBatchはビューポートの座標を描画します。[0、0]はビューポートの左上を、右下はアプリケーションの解像度を示します。 [800,480]。その幅を取得するには、Window.ClientBounds.Bottomの代わりにWindow.ClientBounds.Right、Window.ClientBounds.Heightの代わりにWindow.ClientBounds.Widthを使用します。

うまくいけば助けてください!

+0

はい、機能しました。ありがとう! –

関連する問題