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。它具有相同的位置。
你将不得不使用一些状态字段或事件来做你想做的事情。一些简单的事情可能是跟踪鼠标何时进入和离开矩形:
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
}
}