一、设备的开发
—获取设备信息
—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;
}