在 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 類可以更好地利用上述優勢。