您的位置:首页 > 其它

Windows Phone 7 中TouchPanel的触控操作

2012-11-03 13:35 239 查看
Windows Phone 7 有四种用户交互的方式:
按键
触控
手势
外设(例如重力感应等)
通常来说Windows Phone 7的按键一般只支持Back按键(返回键)的可控操作,其他的两个是不受控的。
在XNA中会自动的生成这样一段代码,就是表示对Back按键的事件响应。
if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)                  this.Exit();
意思就是当Back按键被按下(Pressed)的时候,退出游戏。这个一般是比较简单的。
一、触控
触控最简单的方式就是直接触碰屏幕,Windows Phone 7最多支持4个触控点.
11在XNA中,需要先获得触控装置的状态,然后才能获得触控点的信息(比如触控ID,坐标信息等)。
取得触控信息的方法是由TouchPanel来控制的。通过是使用TouchPanel的GetState()可获得TouchCollection集合(由于支持至少4点的触控,所以取得是集合),集合中存放的是TouchLocation的结构,有三个成员:
ID:表示触控的代码,每一次触控都会有一个唯一的编号
Position:触控的位置
State:触控的状态
State有以下三种状态:
①Pressed.即当前用户触控的状态是按下(手指按在屏幕上).
②Moved.即当前用户触控的状态是移动(手指按在屏幕上并移动)
③Release.当手指从触摸屏上离开的时候
下面的一个例子可以获取State的三种状态。
首先我们声明一个String类型的全局变量TouchMessage
string TouchMessage="";
然后添加一个SpriteFont文件,用于在屏幕上显示文本
接着添加一个SpriteFont类型的全局变量,用来将spritefont资源加载到内容管道中,以便程序使用。
SpriteFont spritefont;
加载SpriteFont资源
spritefont = Content.Load<SpriteFont>(@"Fonts\SpriteFont");
然后我们需要在Update中添加捕获TouchPanel状态的代码,通过TouchPanel的Getstate()方法实现。
protected override void Update(GameTime gameTime)          {              // Allows the game to exit              if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)                  this.Exit();              // TODO: Add your update logic here              TouchMessage=” ”;              TouchCollection tc = TouchPanel.GetState();  //由于GetState获得是状态的集合,所以需要使用foreach取出其中的每个状态。  //通过tc.Count的属性,可以获得集合的数目              foreach (var location in tc)              {                  TouchMessage + = string.Format(" ID:{0}\n Location:{1}\n Position:{2}\n tc.Count:{3}\r\n", location.Id, location.State, location.Position,tc.Count);                          }              base.Update(gameTime);          }
然后在Draw方法中绘制出SpriteFont。
protected override void Draw(GameTime gameTime)          {              GraphicsDevice.Clear(Color.CornflowerBlue);              spriteBatch.Begin();              // TODO: Add your drawing code here              spriteBatch.DrawString(spritefont, TouchMessage, Vector2.Zero, Color.Black);              spriteBatch.End();              base.Draw(gameTime);          }
当手触碰到屏幕时,第一个状态是Pressed,不过很快会变成Moved,当手放开时会出现Released状态,然后会显示没有信号,即TouchMessage内容为空,因为我们是用鼠标在模拟器上点击,只有一个点,当放开鼠标时,就会没有任何状态所以TouchMessage内容为空。



本文出自 “季默” 博客,请务必保留此出处http://potential.blog.51cto.com/6176930/1402581
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: