Touchinteraktion i spelutveckling för Windows Phone 7 Del 1 Grunderna i touchinteraktion

Sidan uppdaterad :
Datum för skapande av sida :

Komma igång med Windows Phone 7

Windows Phone 7-programplattform

Windows Phone 7-utvecklingsmiljön släpptes officiellt i september 2010, och smartphones som faktiskt kör Windows Phone 7 har börjat komma ut på marknaden.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Bild 1: HTC 7 Trophy med Windows Phone 7 säljs av HTC

När du skapar ett program som körs på Windows Phone 7 kan du välja mellan "Silverlight" och "XNA Framework" som programramverk. I allmänhet kommer du att använda "XNA Framework" för spelutveckling och "Silverlight" för andra applikationer som verktyg.

I det här avsnittet används XNA Framework för spelutveckling och hur du använder pekskärmen, som är det mest använda användargränssnittet för Windows Phone 7. Den enkla användningen beskrivs i XNA Game Studio-hjälpen, så jag skulle vilja förklara det på ett lite mer djupgående sätt här.

Förbered utvecklingsmiljön

Det här avsnittet är ur perspektivet av någon som till och med har berört XNA Game Studio något, så jag kommer att utelämna detaljerade instruktioner som installation och installation. Det finns mycket information i hjälpen som följer med XNA Game Studio och på webben, så kolla in det själv. Jag har också några på min webbplats (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Bild 2: Microsoft Visual Studio 2010 Express för Windows Phone (ingår i Windows Phone Developer Tools)

図 3 :Windows Phone エミュレーター
Bild 3: Windows Phone-emulator

Programmering! - 1. Få information om beröring

Om det här exemplet

Den version av XNA Framework som används i Windows Phone 7 är "4.0", men fram till dess fanns det inga klasser för pekskärmar, och tangentbord, möss och gamepads var mainstream. Sedan 4.0 har Windows Phone 7 stödts, och en ny klass dedikerad till pekskärmar har lagts till.

I den här artikeln kommer vi främst att förklara den klassen, men i själva verket, om du vill få enkel beröringspositionsinformation, kan du ersätta en annan klass utan att använda en klass för pekskärmar. Det är klassen "Mus". I det här exemplet använder vi klassen Mus för att få pekinformation.

Mål för detta exempelprogram

När du trycker på skärmen placeras bilden (sprite) enligt pekpositionen.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Bild 3,4: Sprites visas vid vidrörda positioner

Program - Deklarera fält

Jag skulle vilja förklara det tillsammans med provprogrammet direkt. Förklaringar av delar som inte är direkt relaterade till beröringsoperation och program som skapats från början utelämnas, så se källkoden som distribueras separat.

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

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

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

  public Game1()
  {

Fältet deklarerar en struktur som ska ritas vid pekpositionen och en Vector2-strukturvariabel för att lagra pekpositionen.

Program - Läsa in texturer

Texturer har redan lagts till i innehållsprojektet och lästs in med metoden LoadContent. Eftersom innehållet inte är direkt relaterat till pekskärmar utelämnas detaljerade förklaringar.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Bild 6: Lägga till en textur.png i innehållsprojektet

図 7 :今回サンプルで使用する画像
Bild 7: Bild som används i det här exemplet

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

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

Program - Touch Information Acquisition

Pekinformationen hämtas i metoden Game.Update.

Jag får beröringsinformationen med klassen "Mus" istället för från en dedikerad klass. När du använder metoden "Mouse.GetState" returneras det aktuella mustillståndet i strukturen "MouseState", så att du kan få pekpositionen från egenskaperna "MouseState.X" och "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);
}

En sak att notera om att använda musklassen för att få pekinformation är att den bara returnerar enkel information. De enda begränsningarna för information som kan erhållas när du använder klassen Mouse är "endast enkel beröring", "pekposition (MouseState.X, MouseState.Y-egenskap)" och "om du vill röra eller inte (MouseState.LeftButton)". Det stöder inte multi-touch eller gester. Om du får en position när du inte har rört den fortsätter den att återställa den tidigare beröringspositionen. Eftersom inmatningsinformation inte kan tas emot om den inte berörs, kan platsinformation inte förvärvas, till exempel mouseover med musen.

Program - Rita texturer

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

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

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

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

  base.Draw(gameTime);
}

Sammanfattning av detta exempel

Eftersom klassen Mouse ersätter förvärvet av beröringsinformation kan information endast erhållas genom att erhålla beröringspositionen som i detta prov. Omvänt, om du använder en touch-only-klass, kan du få mer information.

Därför är det inte utan meriter att få beröringsinformation med hjälp av Mus-klassen. Att använda klassen Mouse ger följande fördelar:

  • Kan dela kod med musaktiverade spel som körs på Windows
  • Pekplatsinformation kan skrivas med minsta möjliga mängd kod
  • Onödig behandling kan utelämnas

Om du bara använder single touch och only touch positioning kan du dra nytta av ovanstående fördelar genom att använda klassen Mus.