XNA游戏开发——播放音效(2)

上一篇文章已讲述了,如何简单的添加及播放音效,本篇文章将讲述音效实例。

音效实例

调用在SoundEffect对象的Play方法,提供简单的方法来播放声音,在很多情况下将会很充足。对于枪声,爆炸声,玩家成功的声音和其它各种各样的效果,这很可能都是你所需要的。

然而,在其它地方,你可能发现需要很高的控制才能超过你播放的声音。循环播放声音的能力,举例,是非常有用的,但仅由SoundEffect类提供的功能不能提供这种能力。主要的原因是我们将没有办法去阻止声音;我们不能获得一个声音ID或任何类似的值,所以一旦激活一些声音后,我们将不能告诉类哪一个应该停止播放。

在SoundEffectInstance类中可以解决这个问题。通过调用SoundEffect 对象的CreateInstance方法来创建这个实例。

SoundEffectInstance对象与SoundEffect对象非常相似,但有以下几个关键的不同之处:

1)每一个实例仅可以在一个时间内播放一个声音。多次调用Play将不会起作用。为了同时播放多个声音,使用音效实例,需要从底层音效来创建多个实例对象实例对象。

2)对象的音量,音高和平移通过使用类属性来指定,而不是设置Play方法的参数。在声音开始播放后,也允许简单的修改其属性。

3)SoundEffectInstance对象包含一个IsLooped属性,当它设置为ture时来通知循环播放声音。

4)除了Play方法之外,效果实例也提供暂停和停止播放声音的方法。当声音没有循环播放时,它们根本不必去使用,但如果它循环了一个或另一个,这将非常有用来停止正在播放的声音。暂停将记住已播放声音的进度并将在下一次播放前恢复并从当前点开始播放。为了找出是否音效实例是否是停止的、暂停的或正播放中,可以查询它的State属性。

此外,如果当声音播放时,你左右来回滑动你的手指,声音的音高将立刻改变。再次,仅SoundEffectInstance允许作出这个改变,因为仅SoundEffect对象允许当声音首先开始回放时,设置音高(音量和平移也是相同的)

下面代码将描述播放,重调音高和暂停声音。

TouchCollection tc  = TouchPanel.GetState();
if (tc.Count > 0)
{
    // Find  the  region   of  the  screen  that has been touched
    screenRegion  = (int)(tc[0].Position.Y * 4 / Window.ClientBounds.Height);
    // Ensure we  have a region   between 0 and 3
    if (screenRegion  >= 0 &&  screenRegion  <= 3)
    {
        // What type  of  touch  event  do we  have?
        switch   (tc[0].State)
        {
            case TouchLocationState.Pressed:
                // Set  the  pitch based on the  horizontal touch  position
                _soundInstances[screenRegion].Pitch  = (tc[0].Position.X / this.Window.ClientBounds.Width) *  2 - 1;
 
                // Start the  sound for this region
                _soundInstances[screenRegion].Play();
                break;
            case TouchLocationState.Moved:
                // Is the  sound for this region   currently playing?
                if (_soundInstances[screenRegion].State  == SoundState.Playing)
               {
                   // Yes,  so set  the  pitch based on the  horizontal touch  position
                   _soundInstances[screenRegion].Pitch  = (tc[0].Position.X / this.Window.ClientBounds.Width) *  2 - 1;
               }
               break;
            case TouchLocationState.Released:
               // Pause all of  the  sounds
               for (int i = 0;  i < _soundInstances.Length;  i++)
               {
                   _soundInstances[i].Pause();
               }
               break;
           }
       }
}

当释放触摸点时,尝试改变代码以便它调用SoundEffectInstance对象的Stop方法二不是Pause方法。然后你将看到每次声音播放时,它都在开始时重新启动而不是恢复自上次中断的地方。

其他音效属性

我们将简略的看下,通过SoundEffect类的其它属性中暴露出来的2个属性。

第一个是Duration属性,它返回一个TimeSpan正确表明示例将多久将在它默认音高中会去播放。这个属性对于从一个声音到下一个声音都是有用的。

第二个是MasterVolume属性,它确实是一个静态属性,从SoundEffect类中调用而不是从一个实例化对象中调用。它控制随后播放或已正在播放的所有音效的总音量,所以它是很好的方式来调高或调低音量。

就像单独的声音音量,MasterVolume的设置范围在0(无声)到1(最大音量,基于当前设备的最大音量)之间。默认值是1。

转载于:https://www.cnblogs.com/appleseeker/archive/2012/07/12/XNA_Game_Development_Play_MusicEffect_2.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值