您的位置:首页 > 其它

[翻译]XNA 3.0 Game Programming Recipes之fifty-one

2009-09-04 11:07 513 查看
Code
1 private void UpdateSounds()
2 {
3 if(currentCue.IsStopped)
4 {
5 if(++currentCueNr==bgCueNames.Length)
6 currentCueNr=0;
7 PlayBGCue(currentCueNr);
8 }
9 audioEngine.Update();
10 }
如果当前的cue已经正在播放了,你增加currentCueNr,同时设置它回到0,如果已经比可播放cues的数量大,在这种情况下是5。最后,你调用PlayBGCue,所以下一个音频开始播放。
[b]注意:
在currentCueNr之前++表示你想要currentCueNr的值去增加在整个行前得到评估。如果你写了currentCueNr++,这个条件将会是false,如果currentCueNr是4,并且在此之后,这个值增加到5,这将得到一个OutOfRange异常在GetCue方法中。通过写++currentCueNr,如果currentCueNr是4,这个值首先增加到5,这样这个条件将会是true,并且值将重新设置成0。
通过把Update访问在这个方法中的audioEngine,在这个Update方法中所有你不得不调用的是UpdateSounds方法。

代码
直到你可以找到所有的代码为本章前面这个背景播放列表的循环,下面的代码开始一个循环默认的声音在这节的第一部分,通过压下空格键并且通过Enter键结束它:

1 protected override void Update(GameTime gameTime)
2 {
3 GamePadState gamePadState=GamePad.GetState(PlayerIndex.One);
4 if(gamePadState.Buttons.Back==ButtonState.Pressed)
5 this.Exit();
6 KeyboardState keyState=Keyboard.GetState();
7 if(keyState.IskeyDown(Keys.Space)||(gamePadState.Buttons.B==ButtonState.Pressed))
8 {
9 if((cue1==null)||(cue1.IsStopped))
10 {
11 cue1=soundBank.GetCue("audio1");
12 cue1.Play();
13 }
14 }
15 if(keyState.IsKeyDown(Keys.Enter)||(gamePadState.Buttons.A==ButtonState.Pressed))
16 if(cue1!=null)
17 cue1.Stop(AudioStopOptions.Immediate);
18 audioEngine.Update();
19 base.Update(gameTime);
20 } 首先空格键被压下,这个cue1变量将会是null。当用户压下Enter键,这个cue被停止。当用户再次压下空格键,这个cue被重新设置。
再一次,注意,你需要去重新创建这个cue1变量(通过调用GetCue方法)在cue已经停止之后。
源代码:http://shiba.hpe.cn/jiaoyanzu/WULI/soft/xna.aspx?classId=4
(完)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: