Interakcja dotykowa w tworzeniu gier dla systemu Windows Phone 7, część 1 Podstawowe informacje o interakcji dotykowej

Strona zaktualizowana :
Data utworzenia strony :

Wprowadzenie do systemu Windows Phone 7

Platforma aplikacji systemu Windows Phone 7

Środowisko programistyczne Windows Phone 7 zostało oficjalnie wydane we wrześniu 2010 roku, a smartfony z systemem Windows Phone 7 zaczęły trafiać na rynek.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Rysunek 1: HTC 7 Trophy z Windows Phone 7 sprzedawane przez HTC

Podczas tworzenia aplikacji działającej w systemie Windows Phone 7 można wybrać między "Silverlight" i "XNA Framework" jako strukturą programu. Ogólnie rzecz biorąc, będziesz używać "XNA Framework" do tworzenia gier i "Silverlight" do innych aplikacji, takich jak narzędzia.

W tej sekcji użyto struktury XNA do tworzenia gier i wyjaśniono, jak korzystać z panelu dotykowego, który będzie najczęściej używanym interfejsem użytkownika dla systemu Windows Phone 7. Proste użycie jest opisane w pomocy XNA Game Studio, więc chciałbym wyjaśnić to w nieco bardziej szczegółowy sposób tutaj.

Przygotowywanie środowiska programistycznego

Ta sekcja jest z perspektywy kogoś, kto choć trochę dotknął XNA Game Studio, więc pominę szczegółowe instrukcje, takie jak instalacja i konfiguracja. W pomocy dołączonej do XNA Game Studio i w Internecie znajduje się wiele informacji, więc sprawdź to sam. Mam też kilka na mojej stronie (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Rysunek 2: Program Microsoft Visual Studio 2010 Express dla systemu Windows Phone (dołączony do narzędzi deweloperskich systemu Windows Phone)

図 3 :Windows Phone エミュレーター
Rysunek 3: Emulator systemu Windows Phone

Programowanie! - 1. Uzyskiwanie informacji o dotyku

Informacje o tej próbce

Wersja XNA Framework używana w Windows Phone 7 to "4.0", ale do tego czasu nie było klas dla paneli dotykowych, a klawiatury, myszy i gamepady były głównym nurtem. Od wersji 4.0 obsługiwany jest Windows Phone 7 i dodano nową klasę dedykowaną panelom dotykowym.

W tym artykule wyjaśnimy głównie tę klasę, ale w rzeczywistości, jeśli chcesz uzyskać proste informacje o pozycji dotykowej, możesz zastąpić inną klasę bez używania klasy dla paneli dotykowych. Jest to klasa "Mysz". W tym przykładzie użyjemy klasy Mouse, aby uzyskać informacje dotykowe.

Cele tego przykładowego programu

Po dotknięciu ekranu obraz (duszek) jest umieszczany zgodnie z pozycją dotyku.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Rysunek 3,4: Sprite'y pojawiają się w dotykowych pozycjach

Program - Deklarowanie pól

Chciałbym to od razu wyjaśnić wraz z przykładowym programem. Wyjaśnienia części, które nie są bezpośrednio związane z obsługą dotykową oraz programów tworzonych od początku zostały pominięte, dlatego prosimy o zapoznanie się z kodem źródłowym dystrybuowanym osobno.

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

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

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

  public Game1()
  {

Pole deklaruje teksturę do narysowania w miejscu dotyku oraz zmienną struktury Vector2 do przechowywania pozycji dotyku.

Program - Ładowanie tekstur

Tekstury są już dodawane do projektu zawartości i ładowane za pomocą metody LoadContent. Ponieważ treść nie jest bezpośrednio związana z panelami dotykowymi, szczegółowe wyjaśnienia są pomijane.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Rysunek 6: Dodawanie tekstury.png do projektu zawartości

図 7 :今回サンプルで使用する画像
Rysunek 7: Obraz użyty w tym przykładzie

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

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

Program - Touch Information Acquisition

Informacje o dotyku są pobierane w metodzie Game.Update.

Otrzymuję informacje o dotyku za pomocą klasy "Mouse" zamiast z dedykowanej klasy. Podczas korzystania z metody "Mouse.GetState" bieżący stan myszy jest zwracany w strukturze "MouseState", dzięki czemu można uzyskać pozycję dotykową z właściwości "MouseState.X" i "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);
}

Jedną z rzeczy, na które należy zwrócić uwagę podczas korzystania z klasy Mouse w celu uzyskania informacji dotykowych, jest to, że zwraca ona tylko proste informacje. Jedynymi ograniczeniami dotyczącymi informacji, które można uzyskać podczas korzystania z klasy Mouse, są "tylko pojedyncze dotknięcie", "pozycja dotyku (właściwość MouseState.X, MouseState.Y)" i "czy dotykać (MouseState.LeftButton)". Nie obsługuje wielodotyku ani gestów. Ponadto, jeśli otrzymasz pozycję, gdy jej nie dotkniesz, będzie ona nadal zwracać poprzednią pozycję dotykową. Ponieważ informacje wejściowe nie mogą być odbierane, dopóki nie zostaną dotknięte, nie można uzyskać informacji o lokalizacji, takich jak najechanie myszą myszą.

Program - Rysowanie tekstur

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

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

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

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

  base.Draw(gameTime);
}

Podsumowanie tej próbki

Ponieważ klasa Mouse zastępuje pozyskiwanie informacji dotykowych, informacje można uzyskać tylko przez uzyskanie pozycji dotyku, jak w tym przykładzie. I odwrotnie, jeśli używasz klasy tylko dotykowej, możesz uzyskać więcej informacji.

Dlatego nie jest bezzasadne, aby uzyskać informacje dotykowe za pomocą klasy Mouse. Korzystanie z klasy Mouse zapewnia następujące korzyści:

  • Może udostępniać kod w grach obsługujących mysz uruchomionych w systemie Windows
  • Informacje o lokalizacji dotyku można zapisać przy użyciu najmniejszej ilości kodu
  • Niepotrzebne przetwarzanie można pominąć

Jeśli używasz tylko pojedynczego dotknięcia i tylko pozycjonowania dotykowego, możesz skorzystać z powyższych korzyści, korzystając z klasy myszy.