XNA 2D 音效鼠标悬停

本文关键字:悬停 鼠标 音效 2D XNA | 更新日期: 2023-09-27 17:55:40

在这里开发游戏,到目前为止,我已经为我的游戏制作了一个菜单系统。我添加了三个不同的按钮。除了一件事,我已经解决了所有问题。

因此,我使用普通的if相交方法来查看鼠标和按钮矩形是否碰撞以播放声音效果。但是,我不知道如何停止这种声音,它一直在循环播放,直到我将鼠标从按钮上移开。我想让它只播放一次。

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

任何帮助将不胜感激。

顺便说一句:这不是必需的,但是当我将鼠标悬停在按钮上时,我遇到了另一个"问题",它们会变大,这是有意的。但它并没有从中心变得更大。这有点难以解释,但它在 x 和 y 位置变得更大,而不是 -x 和 -y。它具有相同的位置。

XNA 2D 音效鼠标悬停

你将不得不使用一些状态字段或事件来做你想做的事情。一些简单的事情可能是跟踪鼠标何时进入和离开矩形:

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