Взаимодействие с докосване в разработването на игри за 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 и е добавен нов клас, посветен на сензорните панели.

В тази статия ще обясним главно този клас, но всъщност, ако искате да получите проста информация за позицията на докосване, можете да замените друг клас, без да използвате клас за сензорни панели. Това е класът "Мишка". В тази извадка ще използваме класа на мишката, за да получим информация за докосване.

Цели на тази примерна програма

Когато докоснете екрана, изображението (спрайт) се поставя според позицията на допир.

図 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);
}

Едно нещо, което трябва да се отбележи за използването на класа на мишката, за да получите информация за докосване, е, че той връща само проста информация. Единствените ограничения за информация, която може да бъде получена при използване на класа на мишката, са "само с едно докосване", "позиция на докосване (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);
}

Резюме на тази извадка

Тъй като класът на мишката замества придобиването на информация за докосване, информация може да бъде получена само чрез получаване на позицията на допир, както в тази извадка. Обратно, ако използвате клас само за докосване, можете да получите повече информация.

Следователно, не е без основание да получите информация за докосване с помощта на класа на мишката. Използването на класа на мишката осигурява следните предимства:

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

Ако използвате само едно докосване и само докосване позициониране, можете да се възползвате от горните предимства, като използвате класа на мишката.