gpt4 book ai didi

c# - 声音按钮不播放声音

转载 作者:行者123 更新时间:2023-12-03 02:17:41 26 4
gpt4 key购买 nike

我正在制作一个程序,单击按钮即可创建声音,例如那些即时按钮应用程序。但是当我单击按钮时,它不会播放任何声音。我也不知道为什么。
我所有的“构建”调试也都成功了。

这些是我的课:

游戏1.cs:

public class Game1 : Microsoft.Xna.Framework.Game
{
GraphicsDeviceManager graphics;
SpriteBatch spriteBatch;
Texture2D Background;
Button button;



public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "Content";
this.Window.Title = "Bengt Slår På Knappar";
graphics.PreferredBackBufferHeight = 720;
graphics.PreferredBackBufferWidth = 1280;
IsMouseVisible = true;
}

/// <summary>
/// Allows the game to perform any initialization it needs to before starting to run.
/// This is where it can query for any required services and load any non-graphic
/// related content. Calling base.Initialize will enumerate through any components
/// and initialize them as well.
/// </summary>
protected override void Initialize()
{
// TODO: Add your initialization logic here

base.Initialize();
}

/// <summary>
/// LoadContent will be called once per game and is the place to load
/// all of your content.
/// </summary>
protected override void LoadContent()
{
Background = Content.Load<Texture2D>("bengtbakgrund");
Texture2D Btexture = Content.Load<Texture2D>("Button");
SoundEffect dundundun = Content.Load<SoundEffect>("DUN DUN DUN");
button = new Button(dundundun, Btexture);

spriteBatch = new SpriteBatch(GraphicsDevice);


}

/// <summary>
/// UnloadContent will be called once per game and is the place to unload
/// all content.
/// </summary>
protected override void UnloadContent()
{
// TODO: Unload any non ContentManager content here
}

/// <summary>
/// Allows the game to run logic such as updating the world,
/// checking for collisions, gathering input, and playing audio.
/// </summary>
/// <param name="gameTime">Provides a snapshot of timing values.</param>
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
Rectangle mouseRect = new Rectangle(Mouse.GetState().X, Mouse.GetState().Y, 10, 10);
MouseState mouseState = Mouse.GetState();


if (mouseRect.Intersects(button.rect) && mouseState.LeftButton == ButtonState.Pressed)
{
button.MySound.Play();
}

base.Update(gameTime);
}


protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);

spriteBatch.Begin();
spriteBatch.Draw(Background, new Vector2(0,0), Color.White);
button.Draw(spriteBatch, new Vector2(300, 300));
spriteBatch.End();

base.Draw(gameTime);
}
}

按钮.cs:
public class Button
{

Texture2D Texture { get; set; }
public SoundEffect MySound { get; set; }
public Rectangle rect;


public Button(SoundEffect mySound, Texture2D texture)
{
MySound = mySound;
Texture = texture;
}

public void LoadContent(ContentManager Content)
{

}

public void Update(GameTime gameTime)
{

}

public void Draw(SpriteBatch spriteBatch, Vector2 location)
{
Rectangle rect = new Rectangle((int)0, (int)0, Texture.Width, Texture.Height);

spriteBatch.Draw(Texture, location, Color.White);
}
}

我想要做的是有一个基本按钮类,所以如果你想添加一个带有声音的新按钮,你只需写: button = new Button(//sound effect, //texture);
但我无法让它工作。任何帮助,将不胜感激。

最佳答案

您处理按钮位置的方式不正确,我不确定它是如何编译的。在你的 draw 方法中,你定义了一个局部变量 rect已经存在。即使这样做了,您也没有考虑到按钮的实际位置。

我认为你也可以将你的按钮更新逻辑移动到类中,所以我会提出我认为你需要做的事情。

公共(public)类按钮
{
//特性
私有(private)Texture2D纹理{得到;放; }
私有(private) SoundEffect 声音 { 获取;放; }
私有(private)矩形矩形{得到;放; }

public Button(SoundEffect sound, Texture2D texture, Rectangle position)
{
Sound = sound;
Texture = texture;
Rectangle = position;
}

public void Update(GameTime gameTime, MouseState mouseState)
{
//If mouse is down and the rectangle contains the mouse point (Better for points than Intersect())
if (mouseState.LeftButton == ButtonState.Pressed && Rectangle.Contains(new Point(mouseState.X,mouseState.Y))
{
Sound.Play()
}
}

public void Draw(SpriteBatch spriteBatch)
{
spriteBatch.Draw(Texture, rectangle, Color.White);
}

}

然后你可以做 button.Update(Mouse.GetState()) (或者如果您已经有一个 MouseState,请使用另一个 MouseState)

绘图位置与按钮的实际位置(在绘图方法中)似乎有些混淆

你需要确保按钮知道它在屏幕上的位置,以及它的宽度和高度。
button = new Button(dundundun, Btexture, new Rectangle(300, 300, Btexture.Width, Btexture.Height);

这将使按钮位于 300,500并成为纹理的默认大小,现在你的声音按钮完成了:)

我还建议学习和使用 event handlers ,因此您可以为按钮添加事件,例如 button.Click += //Do something容易地

关于c# - 声音按钮不播放声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262540/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com