2011-10-25 37 views
0

我在遊戲中有一個按鈕。當鼠標懸停在其上時,我想將其更改爲其他按鈕圖像,並在鼠標不在按鈕中時更換。XNA按鈕盤旋

的問題是,當鼠標從按鈕的矩形區域出去,它不會改變回第一圖像

我這樣的代碼:

public override void Update(GameTime gameTime) 
    { 
     base.Update(gameTime); 

     MouseState mouseState; 
     mouseDiBack = false; 
     mouseState = Mouse.GetState(); 

     if (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle)) 
     { 
      backButton = backButtonHilite; 
     } 

     if ((mouseState.LeftButton == ButtonState.Pressed) && 
      (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle))) 
     { 
      mouseDiBack = true; 
     } 




    } 

    public override void Draw(GameTime gameTime) 
    { 

     spriteBatch.Draw(ScoreBG, ScoreBGRectangle, Color.White); 
     spriteBatch.Draw(backButton, backButtonRectangle, Color.White); 


     base.Draw(gameTime); 

    } 
} 
} 

任何想法,我該怎麼做。 ..?

回答

0

相當簡單的解決方案,您沒有將圖像設置回鼠標未懸停的情況。

 if (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle)) 
     { 
      backButton = backButtonHilite; 
     } 
     else 
     { 
      backButton = originalImage; //whatever your Texture2D object may be called 
     } 

不要指望機器知道你要切換回來!機器很笨! ..哦,這實際上是因爲你重寫了變量的值,並沒有重置它。

0

當鼠標移出示波器區域時,您不會將backButton設置回原來的狀態。看看下面的代碼,並注意你的Update函數中增加了ELSE語句。

defaultBackButton = backButton; //Save the default back button somewhere outside your update function 

public override void Update(GameTime gameTime) 
    { 
     base.Update(gameTime); 

     MouseState mouseState; 
     mouseDiBack = false; 
     mouseState = Mouse.GetState(); 

     if (new Rectangle(mouseState.X, mouseState.Y, 1,1).Intersects(backButtonRectangle)) 
     { 
      backButton = backButtonHilite; 
     } 
     else 
     { 
      backButton = defaultBackButton; 
     } 


     if ((mouseState.LeftButton == ButtonState.Pressed) && (new Rectangle(mouseState.X, mouseState.Y, 1, 1).Intersects(backButtonRectangle))) 
     { 
      mouseDiBack = true; 
     } 
    } 
0

正如Jon所提到的,當鼠標離開矩形時,您需要設置原始紋理。

bool mouseOverBackButton = 
    mouseX >= buttonRectangle.Left && mouseX <= buttonRectangle.Right && 
    mouseY >= buttonRectangle.Top && mouseY <= buttonRectangle.Bottom; 

backgroundTexture = mouseOverBackButton ? mouseOverTexture: mouseAwayTexture; 
mouseDiBack = mouseState.LeftButton == ButtonState.Pressed && mouseOverBackButton;