|
原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-30-Gestures.aspx
什么是XNA?
整个系列都是关于Silverlight,但是他的姐妹程序XNA也同样可以白用来写程序。你可以看到游戏开发者使用这个平台开发Zune以及Xbox360的程序很久了,如果你想学习XNA,可以去这里:http://create.msdn.com/en-us/education/roadmap
将XNA添加到我们的程序中
第一件是添加Microsoft.Xna.Framework.Input.Touch到工程中。如下:
触及到TouchPanel
XNA实际都是围绕着TouchPanel,或是整个屏幕。通过触及TouchPanel,我们可以直接绑定到手势库上,然后开启我们想要的手势。
添加如下代码:
using Microsoft.Xna.Framework.Input.Touch;
然后:
TouchPanel.EnabledGestures = GestureType.Hold | GestureType.Tap | GestureType.DoubleTap | GestureType.Flick | GestureType.Pinch;
我将这些放置到程序的startup方法中,但是这些可以在任何时候完成,下一步是从哪里偏离XNA,在一个XNA程序中,你有一个每秒钟30次的循环,有两种方式来递归Draw()和Update()。这两个方法相互调用,最终都是更新数据并且显示到屏幕上。
在Silverlight中,我们不必这样做,Silverlight是一个事件驱动,除非事件发生,没有有效地机制允许我们来检查手势。
放大手势的操作事件
如果我们想做一堆数学运算,或是创建我们自己的手势,操作事件是我们将开始使用的地方。通过默认手势,例如Pinch,Flick,Tap,DoubleTap,Hold,没必要对所有的手势都写代码。
我们触及到了TouchPanel,然后开启希望的手势。现在是时间来识别它们了,有一个ManipulationCompleted事件可以附加到所有的控件上,但是我只会将它添加到LayoutRoot控件上,这样无论哪里手势发生都会激发事件。
LayoutRoot.ManipulationCompleted += new EventHandler(LayoutRoot_ManipulationCompleted);
在处理语句中,我们可以检查TouchPanel来查看哪一个手势被执行,这些可以通过switch语句来检查:
void LayoutRoot_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e)
{
while (TouchPanel.IsGestureAvailable)
{
GestureSample gesture = TouchPanel.ReadGesture();
switch (gesture.GestureType)
{
case GestureType.Tap:
GestureText.Text = "Tap";
break;
case GestureType.DoubleTap:
GestureText.Text = "Double Tap";
break;
case GestureType.Hold:
GestureText.Text = "Hold";
break;
case GestureType.Flick:
GestureText.Text = "Flick";
break;
case GestureType.Pinch:
GestureText.Text = "Pinch";
break;
}
}
} |
|
|
|
|
|
|