Puutesisestus Windows Phone 7 mänguarenduses, 1. osa Puutesisestuse põhitõed

Lehekülg uuendatud :
Lehe loomise kuupäev :

Windows Phone 7 kasutamise alustamine

Windows Phone 7 rakenduste platvorm

Windows Phone 7 arenduskeskkond ilmus ametlikult 2010. aasta septembris ja nutitelefonid, mis tegelikult kasutavad Windows Phone 7, on hakanud turule jõudma.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Joonis 1: HTC 7 trofee koos Windows Phone 7-ga, mida müüb HTC

Kui loote rakenduse, mis töötab Windows Phone 7-s, saate programmi raamistikuna valida "Silverlight" ja "XNA Framework" vahel. Üldiselt kasutate "XNA Framework" mängude arendamiseks ja "Silverlight" muudeks rakendusteks, näiteks tööriistadeks.

Selles jaotises kasutatakse XNA raamistikku mängude arendamiseks ja selgitatakse, kuidas kasutada puutepaneeli, mis on Windows Phone 7 kõige enam kasutatav kasutajaliides. Lihtsat kasutamist on kirjeldatud XNA Game Studio abis, nii et tahaksin seda siin veidi põhjalikumalt selgitada.

Valmistage ette oma arenduskeskkond

See jaotis on kellegi vaatenurgast, kes on XNA Game Studiot isegi veidi puudutanud, nii et jätan välja üksikasjalikud juhised, nagu installimine ja seadistamine. XNA Game Studio ja veebi spikris on palju teavet, nii et palun kontrollige seda ise. Mul on mõned ka oma saidil (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Joonis 2: Microsoft Visual Studio 2010 Express Windows Phone'i jaoks (sisaldub Windows Phone Developer Toolsis)

図 3 :Windows Phone エミュレーター
Joonis 3: Windows Phone'i emulaator

Programmeerimine! - 1. Hankige puuteteavet

Selle proovi kohta

Windows Phone 7-s kasutatava XNA raamistiku versioon on "4.0", kuid seni ei olnud puutepaneelide klasse ning klaviatuurid, hiired ja gamepad olid peavool. Alates 4.0-st on toetatud Windows Phone 7 ja lisatud on uus puutepaneelidele pühendatud klass.

Selles artiklis selgitame peamiselt seda klassi, kuid tegelikult, kui soovite saada lihtsat puutetundliku positsiooni teavet, võite asendada teise klassi ilma puutepaneelide klassi kasutamata. See on "Hiire" klass. Selles proovis kasutame puuteteabe saamiseks hiireklassi.

Selle näidisprogrammi eesmärgid

Kui puudutate ekraani, asetatakse pilt (sprait) vastavalt puutetundlikule asendile.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Joonis 3,4: Spraidid ilmuvad puudutatud kohtadesse

Programm - väljade deklareerimine

Tahaksin seda kohe koos näidisprogrammiga selgitada. Selgitused osade kohta, mis ei ole otseselt seotud puuteoperatsiooniga, ja algusest peale loodud programmid jäetakse välja, seega vaadake eraldi levitatavat lähtekoodi.

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

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

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

  public Game1()
  {

Väli deklareerib puutepunktis joonistatava tekstuuri ja puuteasendi salvestamiseks struktuurimuutuja Vector2.

Programm - tekstuuride laadimine

Tekstuurid on juba sisuprojekti lisatud ja laaditud LoadContent meetodiga. Kuna sisu ei ole otseselt seotud puutepaneelidega, jäetakse üksikasjalikud selgitused välja.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Joonis 6: tekstuuri lisamine sisuprojektile .png

図 7 :今回サンプルで使用する画像
Joonis 7: Selles valimis kasutatud pilt

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

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

Programm - puutetundliku teabe hankimine

Puuteteave tuuakse Game.Update meetodist.

Puutetundliku teabe saan "Hiire" klassi, mitte spetsiaalse klassi abil. Meetodi "Mouse.GetState" kasutamisel tagastatakse hiire praegune olek struktuuris "MouseState", nii et puuteasendi saate omadustest "MouseState.X" ja "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);
}

Üks asi, mida tuleb märkida hiireklassi kasutamise kohta puuteteabe saamiseks, on see, et see tagastab ainult lihtsa teabe. Ainsad piirangud teabele, mida saab hiireklassi kasutamisel, on "ainult ühe puudutusega", "puuteasend (MouseState.X, MouseState.Y omadus)" ja "kas puudutada või mitte (MouseState.LeftButton)". See ei toeta mitmikpuuteid ega žeste. Samuti, kui saate positsiooni, kui te pole seda puudutanud, jätkab see eelmise puuteasendi tagastamist. Kuna sisendteavet ei saa vastu võtta, kui seda ei puudutata, ei saa asukohateavet hankida, näiteks hiirekursorit hiirega.

Programm - tekstuuride joonistamine

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

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

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

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

  base.Draw(gameTime);
}

Valimi kokkuvõte

Kuna hiireklass asendab puutetundliku teabe omandamist, saab teavet ainult puutetundliku asendi saamisel nagu selles proovis. Ja vastupidi, kui kasutate ainult puutetundlikku klassi, saate lisateavet.

Seetõttu ei ole hiireklassi abil puutetundliku teabe saamine ilma teeneteta. Hiireklassi kasutamine pakub järgmisi eeliseid:

  • Saab koodi jagada Windowsis töötavate hiiretoega mängudega
  • Puutetundliku asukoha teavet saab kirjutada kõige väiksema koodihulgaga
  • Mittevajaliku töötlemise võib ära jätta

Kui kasutate ainult ühe puudutusega ja ainult puutetundlikku positsioneerimist, saate ülaltoodud eeliseid ära kasutada, kasutades hiireklassi.