• WP7学习笔记(四)


    一、设备的开发
    —获取设备信息
    —Accelerometer:重力加速器
    —Location Service:位置服务
    —FM Radio:收音机
    —Vibrate Controller:振动控制器
    —Reactive Extension:反应器,帮助开发人员在模拟器上产生模拟数据,以利于在模拟器实现设备的开发
    1、获取设备信息
    需要引用命名空间Microsoft.Phone.Info;类UserExtendedProperties(只能获取一个信息ANID),DeviceExtendedProperties(设备相关属性信息);UnAuthorizedAccessException
    代码示例:
    using Microsoft.Phone.Info;
    this.PageTitle.Text = DeviceExtendedProperties.GetValue("DeviceName").ToString();
    2、Accelerometer
    获取重力加速器传感器的数据;命名空间:Microsoft.Devices.Sensors
    代码示例:
    3、
    4、
    5、Reactive Extension
    基本知识:
    1)为制定异步操作指定回调
    2)事件处理程序的时候使用反应性编程
    3)在异步操作完成或者事件触发的时候,就会调用方法并作为对该事件的反应
    4)在这个模型中,数据流、异步请求、事件都可以做为可观察序列,并且接受异步消息;
    5)主要用在:filtering events、composing multiple asynchronous webservice requests、emulating data streams
    二、Hub的开发
    People Hub、Pictrues Hub、Games Hub、Music+Video Hub、Marketplace Hub
    三、XNA在Silverlight中的应用
    XNA中的X表示能够在Window Xbox和合作伙伴之间达到跨平台的强大的软件开发工具;N表示下一代(Next-Generation);A表示架构(Architecture);它是基于DirectX的修正及扩充版本,能帮助开发者在创建更加优秀快速和跨平台的游戏时能够减少费用;
    —在Window Phone中的特点:
    监控和使用accelerometer数据,这样可以开发出具有重力感应的游戏;只能保存数据到IsolateStrage,而保存到其他介质上
    —开发环境:
        硬件:需要显卡最少支持DirectX10,Shader Model2.0;操作系统要求Windows Vista、Windows7
    —基本架构:
     Loading:用来加载保证游戏可以正常运行的所有资源等,这个状态在整个系统中只在游戏中只在游戏开始前运行,也就是说整个游戏的生命周期只运行一次
     Update:这个状态是由所设置的时间间隔来驱动的,在每个时间间隔里重新计算游戏中个角色的状态,以及游戏分值个各种游戏逻辑。一般默认为每秒30次(帧),如果设置间隔过大,游戏可能无法启动
     Draw:这个状态也是由所设置的时间间隔来驱动的,用来绘制各种变化到显示设置上
    —模拟XNA框架
    代码: DispatcherTimer dt=new DispatcherTimer();
                                 dt.Interval=TimeSpan.FormMilliseconds(30);
      dt.Tick+=new EventHandler(dt_Tick);
      dt.Start();
     void dt_Tick(object sender,EventArgs s)
     {
              try
      {
           FrameworkDispatcher.Update();
      }
      catch
      {
      }
     }
    —使用XNA中的功能:
    1、Audio开发:
          1)sound:用来播放一些很短的wav格式的音频,比如点击等声音效果;命名空间Microsoft.Xna.Framwork.Audio
    示例代码:
            SoundEffectInstance SoundInst;
            private void Play_btn_Click(object sender, RoutedEventArgs e)
            {
                StreamResourceInfo info = Application.GetResourceStream(new Uri("Music/Test.wav",UriKind.Relative));
                byte[] buffer=new byte[info.Stream.Length];
                info.Stream.Read(buffer,0,buffer.Length);
                SoundEffect sound = new SoundEffect(buffer,8000,AudioChannels.Mono);
                SoundInst = sound.CreateInstance();
                SoundInst.Play();
            }

            private void Stop_btn_Click(object sender, RoutedEventArgs e)
            {
                SoundInst.Stop();
            }
          2)Song:可以播放mp3等格式的音乐,可以用来播放背景音乐;命名空间Microsoft.Xna.Framework.Media
    示例代码:
    Song song=Song.FromUri("MyMusic",new Uri("Music/Test.mp3",UriKind.Relative));
    MediaPlayer.Play(song);
    Microphone:调用麦克风;命名空间Microsoft.Xna.Framwork.Audio
    2.Input
    就是与用户的交互方法,主要有三种:手势、按键、触控
    命名空间:Microsoft.Xna.Framework.Input
      Microsoft.Xna.Framework.Input.TouchPanel
        1)触控:状态只有Move、Press、Release
    示例代码:
                string hints="";
                TouchCollection collection = TouchPanel.GetState();
                foreach (TouchLocation location in collection)
                {
                    switch(location.State)
                    {
                        case TouchLocationState.Moved:
                            hints = "Moved";
                            break;
                        case TouchLocationState.Released:
                            hints = "Released";
                            break;
                        case TouchLocationState.Pressed:
                            hints = "Pressed";
                            break;
                    }
                }
                this.PageTitle.Text=hints;
        2)手势:可以通过手在屏幕上的不同动作来触发不同应用和触控很相似,但是比其状态要多很多,并且需要指定
    示例代码:
                string tip = "";
                TouchPanel.EnabledGestures=GestureType.Flick|GestureType.VerticalDrag;//用来指定手势,必须要先设定,否则会报错
                if (TouchPanel.EnabledGestures != GestureType.None&&TouchPanel.IsGestureAvailable)
                {
                    switch (TouchPanel.ReadGesture().GestureType)
                    {
                        case GestureType.Tap:
                            tip = "Tap";
                            break;
                        case GestureType.DoubleTap:
                            tip = "DoubleTap";
                            break;
                        case GestureType.FreeDrag:
                            tip = "FreeDrag";
                            break;
                        case GestureType.DragComplete:
                            tip = "DragComplete";
                            break;
                        case GestureType.Flick:
                            tip = "Flick";
                            break;
                        case GestureType.Hold:
                            tip = "Hold";
                            break;
                        case GestureType.HorizontalDrag:
                            tip = "HorizontalDrag";
                            break;
                        case GestureType.None:
                            tip = "None";
                            break;
                        case GestureType.Pinch:
                            tip = "Pinch";
                            break;
                        case GestureType.PinchComplete:
                            tip = "PinchComplete";
                            break;
                        case GestureType.VerticalDrag:
                            tip = "VerticalDrag";
                            break;
                    }
                    this.PageTitle.Text = tip;
                }
           

  • 相关阅读:
    spring scope prototype与singleton区别
    JAVA中的内存们
    汉诺塔问题
    关于设置tomcat端口为80的事
    struts2表单提单细节处理
    volatile的作用
    Java并发编程:Thread类的使用
    git的几个小技巧
    UEdit插件使用
    MySQL优化必须调整的10项配置
  • 原文地址:https://www.cnblogs.com/yja9010/p/3178785.html
Copyright © 2020-2023  润新知