在 Windows Phone 7 游戏开发中,触摸交互是 1 触摸操作的基础知识

更新页 :
页面创建日期 :

开始开发视窗电话 7

视窗电话 7 应用程序平台

Windows Phone 7 的开发环境于 2010 年 9 月正式发布,而实际运行 Windows Phone 7 的智能手机也开始投放市场。

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
图 1:HTC 7 特洛菲,配备 Windows 电话 7,由 HTC 销售

如果要创建在 Windows Phone 7 上运行的应用程序,请选择“银色”或“XNA 框架”作为要使用的程序的框架。 通常,您将使用 XNA 框架来开发游戏,而其他应用程序(如工具)将使用“银光”。

在这里,我们将使用 XNA 框架作为游戏开发,并讨论如何使用“触摸屏”,这是 Windows Phone 7 用户界面最常用的用户界面。 XNA 游戏工作室的帮助中提供了一些简单的用法,因此我想在这里稍微深入一点。

创造良好的开发环境

我们将从您已经接触过 XNA 游戏工作室的角度来讨论它,因此我将不讨论安装和设置等细节。 XNA 游戏工作室附带的帮助和 Web 也包含大量信息,因此请查看它们。 在我的网站上(http://sorceryforce.com/xna/)也介绍了一些。

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
图 2 :Microsoft Visual Studio 2010 Express for Windows Phone(包含在 Windows Phone Developer 工具中)

図 3 :Windows Phone エミュレーター
图 3:视窗电话模拟器

编程! - 1. 获取触摸信息

关于此示例

Windows Phone 7 使用的 XNA 框架版本为 4.0,但在此之前,没有触摸屏类,主要是键盘、鼠标和游戏板。 自 4.0 以来,Windows Phone 7 得到了支持,因此添加了新的触摸屏类。

在本文中,我们将主要讨论该类,但如果要获取有关简单触摸位置的信息,则可以将其替换为其他类,而无需使用触摸屏类。 这是一个“缪斯”类。 在此示例中,我想使用 Mouse 类来获取触摸信息。

此示例程序的目标

触摸屏幕时,图像(子画面)将与触摸位置对齐。

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
图 3,4:子画面显示在触摸的位置

程序 - 声明字段

现在,我想与示例程序一起解释它。 由于我们不讨论与触摸交互没有直接关系或从头开始编写的程序,因此请参阅单独分发的源代码。

public class Game1 : Microsoft.Xna.Framework.Game
{
  GraphicsDeviceManager graphics;
  SpriteBatch spriteBatch;

  /// <summary>
  /// テクスチャー
  /// </summary>
  Texture2D texture;

  /// <summary>
  /// タッチしている位置
  /// </summary>
  Vector2 touchPosition;

  public Game1()
  {

字段声明 Vector2 结构的变量,用于保存纹理和触摸位置,以便在触摸位置绘制。

程序 - 加载纹理

将纹理添加到内容项目,然后使用 LoadContent 方法加载它。 因为它与触摸屏相关没有直接关系,因此没有详细说明。

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
图 6:将文本.png添加到内容项目

図 7 :今回サンプルで使用する画像
图 7:示例中使用的图像

protected override void LoadContent()
{
  // 新規の SpriteBatch を作成します。これはテクスチャーの描画に使用できます。
  spriteBatch = new SpriteBatch(GraphicsDevice);

  // テクスチャーをコンテンツパイプラインから読み込む
  texture = Content.Load<Texture2D>("Texture");
}

程序 - 获取触摸信息

触摸信息在游戏.更新方法中获取。

使用“鼠标”类而不是专用类获取触摸信息。 使用 Mouse.GetState 方法,在“鼠标状态”结构中返回当前鼠标状态,因此您可以从“鼠标状态.X”和“鼠标状态.Y”属性中获取触摸的位置。

protected override void Update(GameTime gameTime)
{
  // ゲームの終了条件をチェックします。
  if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
    this.Exit();

  // マウスの状態を取得(ここではタッチパネルの簡易的な情報)
  MouseState mouseState = Mouse.GetState();

  // タッチしている位置を設定
  touchPosition = new Vector2(mouseState.X, mouseState.Y);
  base.Update(gameTime);
}

使用 Mouse 类获取触摸信息的一个注意事项是,它仅返回简单的信息。 使用 Mouse 类时,只能获取“仅一次触摸”、“触摸位置(鼠标状态.X、鼠标状态.Y 属性)”和“是否触摸(鼠标状态.左按钮)”。 不支持多点触控或手势。 此外,如果未触摸,则返回位置(如果已获取),则继续返回上一个触摸位置。 如果不触摸,您将无法接收输入信息,因此无法获取鼠标悬停等位置信息。

程序 - 绘制纹理

protected override void Draw(GameTime gameTime)
{
  GraphicsDevice.Clear(Color.CornflowerBlue);

  // スプライトの描画準備
  spriteBatch.Begin();

  // タッチしている位置にテクスチャーを描画
  spriteBatch.Draw(texture, touchPosition, Color.White);

  // スプライトの一括描画
  spriteBatch.End();

  base.Draw(gameTime);
}

此示例摘要

由于 Mouse 类替换了触摸信息的获取,因此只能像获取示例一样获取触摸位置。 相反,如果您使用仅触摸类,则可以获取更多信息。

因此,使用 Mouse 类获取触摸信息没有好处。 使用 Mouse 类的好处包括:

  • 与在 Windows 上运行的鼠标感知游戏共享代码
  • 以最少代码编写触摸位置信息
  • 可以省去不必要的处理

如果您只使用触摸位置信息,则使用 Mouse 类可以更好地利用上述优势。