Сенсорна взаємодія в розробці ігор для Windows Phone 7 Частина 1 Основи сенсорної взаємодії

Сторінка оновлюється :
Дата створення сторінки :

Початок роботи з Windows Phone 7

Платформа додатків Windows Phone 7

Середовище розробки Windows Phone 7 було офіційно випущено у вересні 2010 року, і смартфони, які фактично працюють під керуванням Windows Phone 7, почали з'являтися на ринку.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Рисунок 1: HTC 7 Trophy з Windows Phone 7, проданий HTC

Під час створення програми, яка працює на Windows Phone 7, ви можете вибрати між "Silverlight" і "XNA Framework" як фреймворком програми. Загалом, ви будете використовувати "XNA Framework" для розробки ігор і "Silverlight" для інших додатків, таких як інструменти.

У цьому розділі використовується XNA Framework для розробки ігор і пояснюється, як користуватися сенсорною панеллю, яка буде найбільш використовуваним інтерфейсом користувача для Windows Phone 7. Просте використання описано в довідці XNA Game Studio, тому я хотів би пояснити це трохи глибше тут.

Підготуйте своє середовище розробки

Цей розділ з точки зору того, хто хоч трохи торкнувся XNA Game Studio, тому докладні інструкції, такі як установка і настройка, я опущу. У довідці, яка постачається з XNA Game Studio та в Інтернеті, є багато інформації, тому, будь ласка, перевірте її самостійно. У мене також є деякі на моєму сайті (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Рисунок 2: Microsoft Visual Studio 2010 Express для Windows Phone (входить до складу інструментів розробника Windows Phone)

図 3 :Windows Phone エミュレーター
Рисунок 3: Емулятор Windows Phone

Програмування! - 1. Отримання сенсорної інформації

Про цей зразок

Версія XNA Framework, яка використовується в Windows Phone 7, - «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");
}

Програма - Сенсорне отримання інформації

Сенсорна інформація отримується в методі Game.Update.

Я отримую сенсорну інформацію за допомогою класу "Миша", а не з спеціального класу. При використанні методу "Mouse.GetState" в структурі "MouseState" повертається поточний стан миші, тому отримати положення дотику можна з властивостей "MouseState.X" і "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);
}

Одна річ, яку слід зазначити щодо використання класу миші для отримання сенсорної інформації, полягає в тому, що вона повертає лише просту інформацію. Єдиними обмеженнями на інформацію, яку можна отримати при використанні класу Mouse, є "тільки один дотик", "положення дотику (MouseState.X, властивість MouseState.Y)" і "торкатися чи ні (MouseState.LeftButton)". Він не підтримує мультидотик або жести. Крім того, якщо ви отримаєте позицію, коли ви її не торкалися, вона продовжить повертати попереднє положення дотику. Оскільки вхідна інформація не може бути отримана, якщо її не торкнутися, інформацію про місцезнаходження не можна отримати, наприклад, наведення вказівника миші мишею.

Програма - Малювання текстур

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

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

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

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

  base.Draw(gameTime);
}

Короткий зміст даного зразка

Оскільки клас Миша підставляє отримання сенсорної інформації, інформацію можна отримати, тільки отримавши положення дотику як в даному зразку. І навпаки, якщо ви використовуєте клас лише для сенсорного керування, ви можете отримати більше інформації.

Тому не без заслуг отримувати сенсорну інформацію за допомогою класу Миша. Використання класу Mouse дає наступні переваги:

  • Можна ділитися кодом з іграми з підтримкою миші, запущеними у Windows
  • Інформацію про місцезнаходження дотику можна записати з найменшою кількістю коду
  • Непотрібну обробку можна опустити

Якщо ви використовуєте лише один дотик і лише сенсорне позиціонування, ви можете скористатися вищезазначеними перевагами, використовуючи клас Mouse.