2013-01-23 58 views
0

在這裏工作,我迄今爲我的遊戲做了一個菜單系統。我添加了三個不同的按鈕。除了一件事外,我已經整理了一切。XNA 2D音效鼠標盤旋

所以,我正在使用正常的if intersections方法來查看鼠標和按鈕矩形是否發生碰撞來播放聲音效果。但是,我不知道如何阻止這種聲音,它只是一直循環播放,直到我將鼠標從按鈕上移開。我想讓它只玩一次。

public void Update(MouseState mouse, GraphicsDevice graphics, SoundEffect soundEffect) 
{ 
    rectangle = new Rectangle((int)position.X, (int)position.Y, (int)size.X, (int)size.Y); 

    Rectangle mouseRectangle = new Rectangle(mouse.X, mouse.Y, 1, 1); 

    if(mouseRectangle.Intersects(rectangle)) 
    { 
     if (mouse.LeftButton == ButtonState.Pressed) isClicked = true; 
     size = new Vector2(graphics.Viewport.Width/9, graphics.Viewport.Height/13); 
     soundEffect.Play(); 
    } 

    else 
    { 
     size = new Vector2(graphics.Viewport.Width/10, graphics.Viewport.Height/14); 
     isClicked = false; 
    } 

任何幫助將被apreciated。

順便說一句:這不是必須的,但當我將鼠標懸停在按鈕上時,我又遇到了另一個「問題」,它們變得更大了。但它並沒有從中心變大。這很難解釋,但在x和y位置變大,而不是-x和-y。它有相同的位置。

+0

我覺得聲音有'.looping'布爾屬性。嘗試將其設置爲false。 – user1306322

+0

至於按鈕,當光標首先與它們相交時,也將它們的位置改變爲左上角大小差異的一半。像'button.position - = new Vector2(diff/2,diff/2)',然後在離開按鈕時做相反的事情。 – user1306322

回答

1

你將不得不僱用一些狀態字段或事件來做你想做的事情。一些簡單的事情可能是跟蹤鼠標進入和離開矩形的時間:

private bool _mouseIsIntersecting; 

public void Update(...) 
{ 
    rectangle = new Rectangle(...); 

    Rectangle mouseRectangle = new Rectangle(...); 

    if(mouseRectangle.Intersects(rectangle)) 
    { 
     // Handle click and size stuff 

     // Only play the sound if mouse was not previously intersecting 
     if (!_mouseIsIntersecting) 
      soundEffect.Play(); 
     _mouseIsIntersecting = true; 
    } 
    else 
    { 
     _mouseIsIntersecting = false; 

     // Handle other stuff 
    } 
} 
+0

謝謝。現在它是有道理的。精彩! – user2005203