Windows Phone编程简介:第2部分(译文)
By S.F.
本文链接 https://www.kyfws.com/news/introduction-to-windows-phone-programming-part-2/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 3 分钟阅读 - 1344 个词 阅读量 0Windows Phone编程简介:第2部分(译文)
原文地址:https://www.codeproject.com/Articles/108026/Introduction-to-Windows-Phone-Programming-Part-2
原文作者:Joel Ivory Johnson
译文由本站翻译
前言
有关Windows Phone 7编程的博客文章的继续.本部分介绍使用XNA播放声音
介绍
这是多部分博客文章的第2部分.对于第1部分,请参见this. this的第一部分介绍了平台和渲染2D精灵.在这里我继续声音.在下一篇文章中,我将介绍XNA中的3D渲染.
添加声音
通常,您需要在游戏中玩的声音可以分为背景声音(例如背景音乐)或偶然声音(例如某些事件发生的声音效果).让我们开始制作一个可以使用最简单的方法播放声音的程序.创建一个新的XNA Windows Phone游戏项目.创建项目后,右键单击Content项目,然后选择"添加现有项".浏览到系统上的一个小PCM * .wav文件,然后选择要添加到项目中的文件.如果您周围没有PCM WAV文件,建议您下载免费的音频编辑器(例如Audacity),然后使用它将音乐文件的一部分转换为声音.将文件添加到内容项目后,将其重命名为" MySound.wav".您可以通过右键单击文件并选择"重命名"选项来重命名.在" Update()“方法中,我们将添加代码,以便当用户按下并释放屏幕的任何区域时,将播放声音.为名为” _screenPressed"的类创建一个新的布尔字段,并为名为" SoundEffect"的" SoundEffect"类型的新字段创建一个.在" LoadContent()“方法中,使用Content.Load <SoundEffect
>(” MySound.wav");填充mySoundEffect
.现在,如果您运行该程序,则每次您触摸屏幕时,它将播放您的声音.
protected override void Update(GameTime gameTime)
{
var touchState = TouchPanel.GetState();
bool touchDetected = touchState.Count > 0;
if ((!_screenPressed) && (touchDetected))
{
mySoundEffect.Play();
}
_screenPressed = touchDetected;
base.Update(gameTime);
}
如果您想对声音做其他事情,则需要使用SoundEffectInstance
类.可以通过调用SoundEffect
类的CreateInstance()
成员来实例化一个新的SoundEffectInstance
.一旦有了" SoundEffectInstance",您就可以执行以下操作,例如在开始播放后暂停声音,更改播放速度或循环播放声音.让我们更改程序,使其在触摸屏幕时就循环播放声音.添加一个名为soundEffectLoop
的新SoundEffectInstance``字段.在
LoadContent();方法中,在我的
SoundEffect被填充后,立即使用
CreateInstance()方法填充
soundEffectLoop`.
protected override void LoadContent()
{
// Create a new SpriteBatch, which can be used to draw textures.
spriteBatch = new SpriteBatch(GraphicsDevice);
mySoundEffect = Content.Load<SoundEffect>("MySoundFile2");
soundEffectLoop = mySoundEffect.CreateInstance();
}
protected override void Update(GameTime gameTime)
{
// Allows the game to exit
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
this.Exit();
var touchState = TouchPanel.GetState();
bool touchDetected = touchState.Count > 0;
if ((!_screenPressed) && (touchDetected))
{
soundEffectLoop.Play();
}
else if ((_screenPressed)&&!(touchDetected))
{
soundEffectLoop.Stop();
}
_screenPressed = touchDetected;
base.Update(gameTime);
}
下一节
在下一节中,我将介绍XNA 3D渲染功能. CodeProject
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
C# Windows WinMobile Dev Intermediate 新闻 翻译