Interaksi sentuhan dalam pembangunan permainan untuk asas interaksi Windows Phone 7 Part 1 Touch

Laman dikemaskini :
Tarikh penciptaan halaman :

Bermula dengan Windows Phone 7

Platform Aplikasi Windows Phone 7

Persekitaran pembangunan Windows Phone 7 telah dikeluarkan secara rasmi pada September 2010, dan telefon pintar yang sebenarnya menjalankan Windows Phone 7 telah mula memasuki pasaran.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Rajah 1: Trofi HTC 7 dengan Windows Phone 7 dijual oleh HTC

Apabila anda mencipta aplikasi yang berjalan pada Windows Phone 7, anda boleh memilih antara "Silverlight" dan "XNA Framework" sebagai rangka kerja program. Secara umum, anda akan menggunakan "Rangka Kerja XNA" untuk pembangunan permainan dan "Silverlight" untuk aplikasi lain seperti alat.

Bahagian ini menggunakan Rangka Kerja XNA untuk pembangunan permainan dan menerangkan cara menggunakan panel sentuh, yang akan menjadi antara muka pengguna yang paling banyak digunakan untuk Windows Phone 7. Penggunaan mudah diterangkan dalam bantuan XNA Game Studio, jadi saya ingin menerangkannya dengan cara yang lebih mendalam di sini.

Sediakan persekitaran pembangunan anda

Bahagian ini adalah dari perspektif seseorang yang telah sedikit menyentuh XNA Game Studio, jadi saya akan meninggalkan arahan terperinci seperti pemasangan dan persediaan. Terdapat banyak maklumat dalam bantuan yang disertakan dengan XNA Game Studio dan di web, jadi sila lihat sendiri. Saya juga mempunyai beberapa di laman web saya (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Rajah 2: Microsoft Visual Studio 2010 Express untuk Windows Phone (termasuk dalam Alat Pembangun Windows Phone)

図 3 :Windows Phone エミュレーター
Rajah 3: Emulator Windows Phone

Pengaturcaraan! - 1. Dapatkan maklumat sentuhan

Mengenai sampel ini

Versi Rangka Kerja XNA yang digunakan dalam Windows Phone 7 ialah "4.0", tetapi sehingga itu tiada kelas untuk panel sentuh, dan papan kekunci, tikus, dan pad permainan adalah arus perdana. Sejak 4.0, Windows Phone 7 telah disokong dan kelas baharu yang dikhaskan untuk panel sentuh telah ditambah.

Dalam artikel ini, kami akan menerangkan terutamanya kelas itu, tetapi sebenarnya, jika anda ingin mendapatkan maklumat kedudukan sentuh yang mudah, anda boleh menggantikan kelas lain tanpa menggunakan kelas untuk panel sentuh. Ia adalah kelas "Tetikus". Dalam sampel ini, kami akan menggunakan kelas Tetikus untuk mendapatkan maklumat sentuhan.

Matlamat program sampel ini

Apabila anda menyentuh skrin, imej (sprite) diletakkan mengikut kedudukan sentuh.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Rajah 3,4: Sprites muncul di kedudukan tersentuh

Program - Mengisytiharkan Bidang

Saya ingin menerangkannya bersama-sama dengan program sampel dengan segera. Penjelasan mengenai bahagian-bahagian yang tidak berkaitan secara langsung dengan operasi sentuhan dan program yang dibuat dari awal ditinggalkan, jadi sila rujuk kod sumber yang diedarkan secara berasingan.

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

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

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

  public Game1()
  {

Medan ini mengisytiharkan tekstur untuk melukis di lokasi sentuhan dan pemboleh ubah struktur Vector2 untuk menyimpan kedudukan sentuhan.

Program - Memuatkan tekstur

Tekstur telah ditambah ke projek kandungan dan dimuatkan dengan kaedah LoadContent. Oleh kerana kandungannya tidak berkaitan secara langsung dengan panel sentuh, penjelasan terperinci ditinggalkan.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Rajah 6: Tambah Tekstur.png pada projek kandungan anda

図 7 :今回サンプルで使用する画像
Rajah 7: Imej yang digunakan dalam sampel ini

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

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

Program - Pemerolehan Maklumat Sentuh

Maklumat sentuhan diambil dalam kaedah Game.Update.

Saya mendapat maklumat sentuhan menggunakan kelas "Tetikus" dan bukannya dari kelas khusus. Apabila menggunakan kaedah "Mouse.GetState", keadaan tetikus semasa dikembalikan dalam struktur "MouseState", jadi anda boleh mendapatkan kedudukan sentuhan dari sifat "MouseState.X" dan "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);
}

Satu perkara yang perlu diperhatikan tentang menggunakan kelas Tetikus untuk mendapatkan maklumat sentuhan ialah ia hanya mengembalikan maklumat mudah. Satu-satunya sekatan ke atas maklumat yang boleh diperolehi apabila menggunakan kelas Tetikus adalah "sentuhan tunggal sahaja", "kedudukan sentuh (MouseState.X, MouseState.Y property)", dan "sama ada untuk menyentuh (MouseState.LeftButton)". Ia tidak menyokong berbilang sentuhan atau gerak isyarat. Selain itu, jika anda mendapat kedudukan apabila anda tidak menyentuhnya, ia akan terus mengembalikan kedudukan sentuhan sebelumnya. Oleh kerana maklumat input tidak dapat diterima melainkan ia disentuh, maklumat lokasi tidak boleh diperoleh seperti mouseover oleh tetikus.

Program - Tekstur Lukisan

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

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

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

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

  base.Draw(gameTime);
}

Ringkasan sampel ini

Oleh kerana kelas Tetikus menggantikan pemerolehan maklumat sentuhan, maklumat hanya boleh diperolehi dengan mendapatkan kedudukan sentuhan seperti dalam sampel ini. Sebaliknya, jika anda menggunakan kelas sentuh sahaja, anda boleh mendapatkan lebih banyak maklumat.

Oleh itu, bukan tanpa merit untuk mendapatkan maklumat sentuhan menggunakan kelas Tetikus. Menggunakan kelas Tetikus memberikan faedah berikut:

  • Boleh berkongsi kod dengan permainan didayakan tetikus yang berjalan pada Windows
  • Maklumat lokasi sentuh boleh ditulis dengan jumlah kod yang paling sedikit
  • Pemprosesan yang tidak perlu boleh ditinggalkan

Jika anda hanya menggunakan sentuhan tunggal dan hanya menyentuh kedudukan, anda boleh memanfaatkan faedah di atas dengan menggunakan kelas Tetikus.