一起學windows phone7開發(二十七. XNA在Silverlight 中的應用)

來源:互聯網
上載者:User

    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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.