Dotyková interakce při vývoji her pro Windows Phone 7 Část 1: Základy dotykové interakce

Stránky aktualizovány :
Datum vytvoření stránky :

Začínáme s Windows Phone 7

Aplikační platforma Windows Phone 7

Vývojové prostředí Windows Phone 7 bylo oficiálně vydáno v září 2010 a smartphony, které skutečně běží Windows Phone 7, se začaly dostávat na trh.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Obrázek 1: HTC 7 Trophy s Windows Phone 7 prodávaný společností HTC

Při vytváření aplikace, která běží na Windows Phone 7, můžete si vybrat mezi "Silverlight" a "XNA Framework" jako programový rámec. Obecně budete používat "XNA Framework" pro vývoj her a "Silverlight" pro jiné aplikace, jako jsou nástroje.

Tato část používá XNA Framework pro vývoj her a vysvětluje, jak používat dotykový panel, který bude nejpoužívanějším uživatelským rozhraním pro Windows Phone 7. Jednoduché použití je popsáno v nápovědě XNA Game Studio, takže bych to zde rád vysvětlil trochu podrobněji.

Příprava vývojového prostředí

Tato sekce je z pohledu někoho, kdo se alespoň trochu dotkl XNA Game Studio, takže vynechám podrobné pokyny jako je instalace a nastavení. V nápovědě, která přichází s XNA Game Studio a na webu, je mnoho informací, takže se na to prosím podívejte sami. Mám také nějaké na svých stránkách (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Obrázek 2: Microsoft Visual Studio 2010 Express pro Windows Phone (součást nástrojů pro vývojáře pro Windows Phone)

図 3 :Windows Phone エミュレーター
Obrázek 3: Emulátor Windows Phone

Programování! - 1. Získání informací o dotyku

O této ukázce

Verze XNA Framework používaná ve Windows Phone 7 je "4.0", ale do té doby neexistovaly žádné třídy pro dotykové panely a klávesnice, myši a gamepady byly hlavním proudem. Od verze 4.0 je podporován Windows Phone 7 a byla přidána nová třída věnovaná dotykovým panelům.

V tomto článku vysvětlíme hlavně tuto třídu, ale ve skutečnosti, pokud chcete získat jednoduché informace o dotykové poloze, můžete nahradit jinou třídu bez použití třídy pro dotykové panely. Je to třída "Mouse". V této ukázce použijeme třídu Mouse k získání informací o dotyku.

Cíle tohoto ukázkového programu

Když se dotknete obrazovky, obraz (pohyblivý symbol) se umístí podle polohy dotyku.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Obrázek 3,4: Sprites se objevují na dotykových místech

Program - deklarování polí

Rád bych to hned vysvětlil spolu s ukázkovým programem. Vysvětlení částí, které přímo nesouvisejí s dotykovým ovládáním a programy vytvořenými od začátku, jsou vynechány, proto se prosím podívejte na zdrojový kód distribuovaný samostatně.

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

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

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

  public Game1()
  {

Pole deklaruje texturu pro kreslení v místě dotyku a proměnnou struktury Vector2 pro uložení polohy dotyku.

Program - Načítání textur

Textury jsou již přidány do projektu obsahu a načteny pomocí metody LoadContent. Vzhledem k tomu, že obsah přímo nesouvisí s dotykovými panely, jsou vynechána podrobná vysvětlení.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Obrázek 6: Přidání textury.png do projektu obsahu

図 7 :今回サンプルで使用する画像
Obrázek 7: Obrázek použitý v této ukázce

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

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

Program - Dotykové získávání informací

Informace o dotyku se načítají v metodě Game.Update.

Informace o dotyku získávám pomocí třídy "Myš" místo z vyhrazené třídy. Při použití metody "Mouse.GetState" je aktuální stav myši vrácen ve struktuře "MouseState", takže můžete získat dotykovou pozici z vlastností "MouseState.X" a "MouseState.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);
}

Jedna věc, kterou je třeba poznamenat o použití třídy Mouse k získání dotykových informací, je, že vrací pouze jednoduché informace. Jediná omezení informací, které lze získat při použití třídy Mouse, jsou "pouze jedním dotykem", "pozice dotyku (vlastnost MouseState.X, MouseState.Y)" a "zda se chcete dotknout (MouseState.LeftButton)". Nepodporuje vícedotykové ovládání ani gesta. Pokud získáte pozici, když jste se jí nedotkli, bude pokračovat v návratu předchozí dotykové pozice. Vzhledem k tomu, že vstupní informace nelze přijmout, pokud se jich nedotknete, nelze získat informace o poloze, například najetí myší.

Program - Kreslení textur

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

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

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

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

  base.Draw(gameTime);
}

Shrnutí této ukázky

Vzhledem k tomu, že třída Mouse nahrazuje získávání dotykových informací, informace lze získat pouze získáním dotykové pozice jako v tomto vzorku. Naopak, pokud používáte pouze dotykovou třídu, můžete získat více informací.

Proto není bez zásluh získat dotykové informace pomocí třídy Mouse. Použití třídy Mouse poskytuje následující výhody:

  • Může sdílet kód s hrami s podporou myši spuštěnými v systému Windows
  • Informace o poloze dotyku lze zapsat s nejmenším množstvím kódu
  • Zbytečné zpracování lze vynechat

Pokud používáte pouze jeden dotyk a pouze dotykové polohování, můžete využít výše uvedených výhod pomocí třídy Mouse.