0

ここでゲームに取り組んでおり、これまでにゲームのメニュー システムを作成しました。3 つの異なるボタンを追加しました。1つのことを除いて、すべてを整理しました。

そのため、通常の if intersects メソッドを使用して、マウスとボタンの四角形が衝突して効果音を再生しているかどうかを確認しています。ただし、この音を止める方法がわかりません。ボタンからマウスを離すまで、常にループしています。1回だけ再生できるようにしたいです。

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 に答える