0

在这里开发游戏,到目前为止,我已经为我的游戏制作了一个菜单系统。我添加了三个不同的按钮。除了一件事,我把一切都整理好了。

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

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。它具有相同的位置。

4

1 回答 1

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
    }
}
于 2013-01-23T20:18:20.543 回答