Сенсорное взаимодействие в разработке игр для 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 для получения сенсорной информации, заключается в том, что он возвращает только простую информацию. Единственными ограничениями на информацию, которую можно получить при использовании класса 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 заменяет получение сенсорной информации, информация может быть получена только путем получения сенсорного положения, как в этом примере. И наоборот, если вы используете класс только для сенсорного ввода, вы можете получить больше информации.

Поэтому не лишено смысла получать сенсорную информацию с помощью класса Mouse. Использование класса Mouse обеспечивает следующие преимущества:

  • Может обмениваться кодом с играми с поддержкой мыши, работающими в Windows
  • Информация о местоположении сенсорного ввода может быть написана с наименьшим количеством кода
  • Ненужная обработка может быть опущена

Если вы используете только одно касание и только сенсорное позиционирование, вы можете воспользоваться вышеуказанными преимуществами с помощью класса Mouse.