我一直在阅读有关将声音编程到c#XNA游戏中的不同方式。我已经决定为音量控制使用声音实例,但在播放.wav时,我意识到声音只会在完成后才会播放,而使用Sound Effect .Play()(而不是实例)将导致它播放自己的多个副本,如果它被要求。所以我的问题是,在按下一个按钮的情况下,会导致一次播放多个声音效果(例如机枪或类似的重复无人机),而不是等到声音文件结束循环;你将如何使用一个实例?我假设有一些我错过了,或者一个实例不是为这个用途而设计的。如果是这样,Sound Effect的基本选项与Sound Effect Instance的主要区别是什么?提前致谢。从一个实例重复声音
1
A
回答
4
A SoundEffectInstance
是声音播放的单个实例;根据定义,它不能一次播放超过一个。当然,你可以有多个相同的实例SoundEffect
。实际上,这基本上是当您拨打SoundEffect.Play()
时发生的情况:您正在创建实例并播放它。
记住这一点,你的盘子上有几个选项。如果[假定]想要在按住按钮时阻止十亿个声音完全播放,那么肯定不应该使用SoundEffect.Play()
,就像您发现的一样,将会创建许多许多实例(这可能对性能非常不利和总体管理)。对于频率较低的声音来说,这可能是一种好方法。
话虽如此,SoundEffectInstance
可以用什么方式?基本上它可以从头开始重新启动。请注意,您当然可以拥有多个SoundEffectInstance
,每个游戏组件包含一个(或多个)组件。通过这种方式,你的一把枪可以重新启动,而不会混淆不同枪的相同声音。或者出于性能原因,您可以选择每个音效只有一个实例。
我有问题,尝试重新启动“简单”的方式:
instance.Stop();
instance.Play();
历史上,这并没有为我工作;如果它为你做,不考虑以下内容:
我所要做的是为每个实例设置我自己的“重新启动”标志。所以我包裹SoundEffectInstance
类用我自己的,像这样:
//class that represents one sound effect instance PLUS restart flag
public class Sound
{
SoundEffectInstance instance;
bool restart;
public Sound(SoundEffectInstance i)
{
instance = i;
restart = false;
}
public bool PlayingOrRestarting()
{
return State == SoundState.Playing || restart;
}
public void Update()
{
if (restart)
{
instance.Play();
restart = false;
}
}
public void Play()
{
instance.Play();
}
public void Restart()
{
instance.Stop();
restart = true;
}
public void Stop()
{
instance.Stop();
restart = false;
}
public SoundState State
{
get { return instance.State; }
}
public float Volume
{
set { instance.Volume = value; }
get { return instance.Volume; }
}
public bool IsLooped
{
set { instance.IsLooped = value; }
get { return instance.IsLooped; }
}
}
使用这种方法,你必须调用Update()为每Sound
每一帧,所以要收集他们的地方,或者让他们以其他方式使用。
相关问题
- 1. 一次播放一个声音实例
- 2. 重复的声音
- 3. UILocalNotification重复声音
- 4. 声音的多个实例(SoundJS)
- 5. OpenAL播放声音,dealloc一个实例,所有其他的声音dispeared?
- 6. 如何重复UILocalNotification声音
- 7. 重复通知声音
- 8. 播放第二个声音还重放第一个声音?
- 9. 非法实例声明/重叠实例
- 10. 声音的第一个实例被延迟
- 11. django重复 - 获取重复字段的最后一个实例
- 12. 从另一个实例恢复快照
- 13. WPF播放声音定时器刻度 - 不重复声音
- 14. 复制一个类实例
- 15. 复制一个从一个Redis的实例另一个
- 16. 从InitializeComponent()实例化的重复模型
- 17. icalendar从重复中删除实例
- 18. 删除重复的最后一个实例从一个Python列表
- 19. 如何重复系统声音
- 20. 每5秒后重复播放声音
- 21. 如何重复声音效果MotionEvent.ACTION_DOWN
- 22. 延迟重复通知声音
- 23. 重复的movieclip和声音开关
- 24. animateWithDuration播放声音不重复
- 25. SQL:重复实例,成一行
- 26. Android:从一个布局声明实例化多个小部件
- 27. 如何在多个重叠实例中制作声音文件播放?
- 28. 实例化一个int如果声明
- 29. 等待一个声音播放下一个声音
- 30. 从另一个班级停止声音
谢谢,这完全清除了我的查询。 – GamersIncoming