Windows Phone 7 有四种用户交互的方式:

  1. 按键
  2. 触控
  3. 手势
  4. 外设(例如重力感应等)

通常来说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内容为空。