2013-01-23 8 views
0

Travaillant sur un jeu ici et j'ai jusqu'à présent fait un système de menu pour mon jeu. J'ai ajouté trois boutons différents. J'ai tout réglé sauf une chose. Donc, j'utilise une méthode normale si croise pour voir si la souris et le rectangle du bouton entrent en collision pour jouer un effet sonore. Cependant, je ne sais pas comment arrêter ce son et il se boucle tout le temps, jusqu'à ce que je supprime la souris du bouton. Je veux faire en sorte qu'il ne joue qu'une seule fois.XNA 2D effet sonore souris planant

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; 
    } 

Toute aide serait appréciée.

BTW: Ce n'est pas nécessaire, mais j'ai un autre "problème" lorsque je passe la souris sur les boutons, ils grossissent ce qui est prévu. Mais ça ne grossit pas du centre. C'est un peu difficile à expliquer mais il grossit en position x et y, pas -x et -y. Il a la même position.

+0

Je pense que les sons ont une propriété booléenne '.looping'. Essayez de le définir sur false. – user1306322

+0

En ce qui concerne les boutons, lorsque le curseur les croise d'abord, changez également leur position de la moitié de la différence de taille en haut à gauche. Comme 'button.position - = new Vector2 (diff/2, diff/2)' et ensuite faire le contraire en quittant le bouton. – user1306322

Répondre

1

Vous allez devoir utiliser des champs de statut ou des événements pour faire ce que vous voulez. Quelque chose de simple pourrait être de suivre lorsque la souris entre et quitte le rectangle:

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

Merci. Maintenant, cela a du sens. Formidable! – user2005203