XNA這個是WP7的另一個架構,主要用來開發遊戲,但是同樣有一些功能也可以在Silverlight中使用,來彌補Silverlight中所沒有的一些功能。要讓XNA能夠在silverlight中使用,首先要類比XNA架構。
可以通過DispatcherTimer來類比XNA架構中的Update
DispatcherTimer dt = new DispatcherTimer();
dt.Interval = TimeSpan.FromMilliseconds(33);
dt.Tick += new EventHandler(dt_Tick);
dt.Start();
void dt_Tick(object sender, EventArgs e)
{
try
{
FrameworkDispatcher.Update();
}
catch
{
}
}
一.音頻:一般用來播放一些很短的wav格式的音頻,但是在Silverlight中也一樣要用MediaElement來播放,所以可以利用XNA中的Audio來播放這些簡訊的音效。需要將音頻檔案流讀入到記憶體中,進行播放。並且要設定好SoundEffect中的SampleRate的取值範圍(8000-48000Hz)
SoundEffect sound = new SoundEffect(Stream.ToArray(), 8000, AudioChannels.Mono);
SoundEffectInstance inst = sound.CreateInstance();
inst.Play();
二.音樂:在silveright中,播放mp3音樂也同樣要用到MediaElement控制項,但是要用來做背景音樂,就顯的有點不太合適了,所以可用XNA提供的Song和MediaPlayer類來載入並播放背景音樂,並且也很好控制。
Song song = Song.FromUri(“Kalim”, new Uri(“Kalimba.mp3″, UriKind.Relative));
MediaPlayer.Play(song);
三.Microphone用來在silverlight中錄製聲音。
using Microsoft.Xna.Framework.Audio;
_Microphone.BufferReady += new EventHandler<EventArgs>(_Microphone_BufferReady);
_Microphone.GetData(buffer);
_Microphone.Start();
_Microphone.Stop();
四.Input:對於輸入方式在一起學WP7 XNA遊戲開發(四. Input)中已經詳細講過,在silverlight中,XNA方式只能夠使用觸控和手勢,對於鍵盤是擷取不到的,所以仍然只能使用事件方式來擷取。
一.觸控:狀態也很少,只有Move、Press、Release這麼幾種。
TouchCollection touchState = TouchPanel.GetState();
foreach (TouchLocation location in touchState)
{
switch (location.State)
{
case TouchLocationState.Pressed:
break;
case TouchLocationState.Moved:
break;
case TouchLocationState.Released:
break;
}
}
三.手勢:可以通過手在螢幕上的不同動作來觸發不同應用和觸控很相似,但是比其狀 態要多很多,並且需要指定。
TouchPanel.EnabledGestures = GestureType.FreeDrag;//用來指定手勢,必須要先設定,否則分報錯
if (TouchPanel.EnabledGestures != GestureType.None)
{
switch (TouchPanel.ReadGesture())
{
case GestureType.Tap:
break;
case GestureType.DoubleTap:
break;
case GestureType.FreeDrag:
break;
case GestureType.DragComplete:
break;
case GestureType.Flick:
break;
case GestureType.Hold:
break;
case GestureType.HorizontalDrag:
break;
case GestureType.None:
break;
case GestureType.Pinch:
break;
case GestureType.PinchComplete:
break;
case GestureType.VerticalDrag:
break;
}
}
}
樣本下載:http://www.52winphone.com/bbs/viewthread.php?tid=32&extra=page%3D1