博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XNA 中 SoundEffect 与 SoundEffectInstance 的区别
阅读量:6772 次
发布时间:2019-06-26

本文共 2439 字,大约阅读时间需要 8 分钟。

如果你希望在 Windows Phone 上创建游戏,那么 XNA 是一个选择。平方会和你一起探讨和学习 Windows Phone 中 XNA 的小知识。

在 XNA 中 SoundEffect 和 SoundEffectInstance 都可以用来播放声音,比如:常见的 wav 波形文件。但是要注意的是无论是 SoundEffect 或者 SoundEffectInstance 都不能播放 mp3 文件,播放 mp3 需要 XNA 中的 Song 类。

共享资源

你可以将声音文件载入到 SoundEffect 类中,你还可以从 SoundEffect 创建新的 SoundEffectInstance。而这些新的 SoundEffectInstance 将共享 SoundEffect 中包含的声音资源。

在 SoundEffect 的生命周期中,他将保持资源。而一旦 SoundEffect 被销毁,也就是意味着他所创建的 SoundEffectInstance 都将失效。

下面的代码中,我们在 LoadConent 方法中载入声音,在 UnloadConent 方法中释放他们。通过 mySound 我们创建了 mySound1 和 mySound2。

1 private ContentManager contentManager; 2 private SoundEffect mySound; 3 private SoundEffectInstance mySound1; 4 private SoundEffectInstance mySound2; 5  6 protected override void LoadContent ( ) 7 { 8  // ... 9  spriteBatch = new SpriteBatch ( GraphicsDevice );10 11  if ( null == this.contentManager )12   this.contentManager = new ContentManager ( Services, "Content" );13 14  this.mySound = this.contentManager.Load
( @"mysound" );15 this.mySound1 = this.mySound.CreateInstance ( );16 this.mySound2 = this.mySound.CreateInstance ( );17 // ...18 } 19 20 protected override void UnloadContent ( )21 {22 // ...23 this.mySound1.Dispose ( );24 this.mySound2.Dispose ( );25 this.mySound.Dispose ( );26 27 this.contentManager.Unload ( );28 // ...29 }

如果我们在 Update 方法中释放 mySound,则调用 mySound1 或者 mySound2 的 Play 方法将出现错误。

1 protected override void Update ( GameTime gameTime )2 {3  // ...4 5  this.mySound.Dispose ( );6  this.mySound1.Play ( );7 }

重复播放

不管是 SoundEffect 或者 SoundEffectInstance,如果声音没有播放完毕,那么调用 Play 方法是无效的。如果你在 Update 中一直调用 Play 方法,声音只会在他播放完毕后才会重新播放。

1 protected override void Update ( GameTime gameTime )2 {3  // ...4 5  this.mySound.Play ( );6 }

如果你希望在声音没有播放完成时,重复播放他,那么你可以定义多个 SoundEffectInstance。

播放声音总数

在 Windows Phone 中,XNA 同时播放的声音总数为 16 个。

停止播放

由于 SoundEffect 一般只是播放较小的声音文件,所以一般情况下,是不会停止播放声音的。但如果有时你在循环播放,可能就要用到 Stop 方法。而要停止声音需要通过 SoundEffectInstance 类。

1 protected override void Update ( GameTime gameTime ) 2 { 3  // ... 4  5  int seconds = ( int ) gameTime.TotalGameTime.TotalSeconds; 6  7  if ( seconds > 5 ) 8  { 9   if ( this.mySound1.State != SoundState.Stopped )10    this.mySound1.Stop ( );11  }12  else13  if ( this.mySound1.State == SoundState.Stopped )14  {15   this.mySound1.IsLooped = true;16   this.mySound1.Play ( );17   }18 }

完,与平方一起探索 XNA,体验编程非凡乐趣,更多内容请浏览,转载请注明出处:

转载于:https://www.cnblogs.com/zoyobar/archive/2013/04/14/xna_soundeffect1.html

你可能感兴趣的文章
Bot Style Tests
查看>>
live_m3u8
查看>>
merge使用语法
查看>>
Android中广播接收者BroadcastReceiver的理解与基本使用
查看>>
我的友情链接
查看>>
linux 下记得某个字符串,查找所属的文件路径
查看>>
shell编程学习之函数
查看>>
Sping Boot集成MyBatis打包成jar时,找不到类的问题
查看>>
敏捷个人的创立与详解Scrum会议
查看>>
沫沫金:jQuery EasyUI 动态表头
查看>>
Mac下设置Vim配色
查看>>
javascript(十五) 错误处理技术
查看>>
整合 Tachyon 运行Shark(译)
查看>>
HBase 常用的配置参数(持续更新)
查看>>
博客迁移
查看>>
(MARK)Ubuntu 软件中心最受好评的 20 款软件
查看>>
我的友情链接
查看>>
Debian/Ubuntu自有软件包构建私有源
查看>>
强大的vim编辑器
查看>>
Kafka pixy
查看>>