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;
            }
       

posted @ 2011-11-07 19:52  JumpByte  阅读(128)  评论(0编辑  收藏  举报