• 一起学windows phone7开发(二十七. XNA在Silverlight 中的应用)


        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

  • 相关阅读:
    官场22条潜规则,职场谁说不是呢
    pomelo使用中的常见问题
    马斯诺需求金字塔
    Mac上使用brew安装nvm来支持多版本的Nodejs
    Redis 集群解决方案 Codis
    Linux下压缩某个文件夹(文件夹打包)
    使用forever运行nodejs应用
    nodejs npm常用命令
    Mac安装Brew
    C#2.0 迭代器
  • 原文地址:https://www.cnblogs.com/randylee/p/1914533.html
Copyright © 2020-2023  润新知