Dotyková interakcia pri vývoji hier pre Windows Phone 7, časť 1 Základy dotykovej interakcie

Stránka aktualizovaná :
Dátum vytvorenia strany :

Začíname s Windows Phonom 7

Aplikačná platforma Windows Phone 7

Vývojové prostredie Windows Phone 7 bolo oficiálne vydané v septembri 2010 a smartfóny, ktoré skutočne používajú Windows Phone 7, sa začali dostávať na trh.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Obrázok 1: HTC 7 Trophy s Windows Phonom 7 predávaný spoločnosťou HTC

Keď vytvoríte aplikáciu, ktorá beží na Windows Phone 7, môžete si vybrať medzi "Silverlight" a "XNA Framework" ako programovým rámcom. Vo všeobecnosti budete používať "XNA Framework" na vývoj hier a "Silverlight" pre iné aplikácie, ako sú nástroje.

Táto časť používa XNA Framework na vývoj hier a vysvetľuje, ako používať dotykový panel, ktorý bude najpoužívanejším používateľským rozhraním pre Windows Phone 7. Jednoduché použitie je popísané v pomocníkovi XNA Game Studio, preto by som to tu chcel vysvetliť trochu podrobnejšie.

Pripravte si svoje vývojové prostredie

Táto časť je z pohľadu niekoho, kto sa čo i len trochu dotkol XNA Game Studio, takže vynechám podrobné pokyny, ako je inštalácia a nastavenie. V pomocníkovi, ktorý prichádza s XNA Game Studio, a na webe je veľa informácií, preto si ich prosím pozrite sami. Niektoré mám aj na svojich stránkach (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Obrázok 2: Microsoft Visual Studio 2010 Express pre Windows Phone (súčasť vývojárskych nástrojov Windows Phonu)

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

Programovanie! - 1. Získanie informácií o dotyku

O tejto vzorke

Verzia XNA Framework používaná vo Windows Phone 7 je "4.0", ale dovtedy neexistovali žiadne triedy pre dotykové panely a klávesnice, myši a gamepady boli hlavným prúdom. Od verzie 4.0 je podporovaný Windows Phone 7 a bola pridaná nová trieda venovaná dotykovým panelom.

V tomto článku vysvetlíme hlavne túto triedu, ale v skutočnosti, ak chcete získať jednoduché informácie o dotykovej polohe, môžete nahradiť inú triedu bez použitia triedy pre dotykové panely. Je to trieda "Myši". V tejto vzorke použijeme triedu myší na získanie informácií o dotyku.

Ciele tohto vzorového programu

Keď sa dotknete obrazovky, obraz (sprite) sa umiestni podľa dotykovej polohy.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Obrázok 3,4: Sprity sa objavujú v dotykových polohách

Program - Deklarovanie polí

Chcel by som to hneď vysvetliť spolu so vzorovým programom. Vynechávajú sa vysvetlenia častí, ktoré priamo nesúvisia s dotykovým ovládaním a programami vytvorenými od začiatku, preto si pozrite zdrojový kód distribuovaný samostatne.

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

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

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

  public Game1()
  {

Pole deklaruje textúru, ktorá sa má nakresliť na dotykovom mieste, a premennú štruktúry Vector2 na uloženie dotykovej polohy.

Program - Načítanie textúr

Textúry sú už pridané do projektu obsahu a načítané metódou LoadContent. Keďže obsah priamo nesúvisí s dotykovými panelmi, podrobné vysvetlenia sa vynechávajú.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Obrázok 6: Pridanie textúry.png do projektu obsahu

図 7 :今回サンプルで使用する画像
Obrázok 7: Obrázok použitý v tejto ukážke

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

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

Program - Získavanie dotykových informácií

Informácie o dotyku sa načítajú metódou Game.Update.

Informácie o dotyku získavam pomocou triedy "Myš" namiesto z vyhradenej triedy. Pri použití metódy "Mouse.GetState" sa aktuálny stav myši vráti v štruktúre "MouseState", takže môžete získať dotykovú polohu 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 vec, ktorú je potrebné poznamenať o používaní triedy myši na získanie informácií o dotyku, je, že vracia iba jednoduché informácie. Jediné obmedzenia informácií, ktoré je možné získať pri používaní triedy myši, sú "iba jedným dotykom", "dotyková poloha (MouseState.X, vlastnosť MouseState.Y)" a "či sa dotknúť alebo nedotknúť (MouseState.LeftButton)". Nepodporuje viacdotykové ovládanie ani gestá. Tiež, ak získate polohu, keď ste sa jej nedotkli, bude naďalej vracať predchádzajúcu dotykovú polohu. Keďže vstupné informácie nie je možné prijať, pokiaľ sa ich nedotknete, informácie o polohe nie je možné získať, ako napríklad pohyb myšou.

Program - kreslenie textúr

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

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

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

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

  base.Draw(gameTime);
}

Zhrnutie tejto vzorky

Keďže trieda myší nahrádza získavanie dotykových informácií, informácie je možné získať iba získaním dotykovej polohy ako v tejto vzorke. Naopak, ak používate triedu iba na dotykové ovládanie, môžete získať viac informácií.

Preto nie je bezvýznamné získať dotykové informácie pomocou triedy Myši. Používanie triedy myši poskytuje nasledujúce výhody:

  • Môže zdieľať kód s hrami s podporou myši spustenými v systéme Windows
  • Informácie o polohe dotyku je možné napísať s najmenším množstvom kódu
  • Zbytočné spracovanie je možné vynechať

Ak používate iba polohovanie jedným dotykom a iba dotykom, môžete využiť vyššie uvedené výhody pomocou triedy myši.