posts - 118,  comments - 447,  views - 27万

    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

posted on   小镇  阅读(2151)  评论(1编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2010年12月 >
28 29 30 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示