Interaksi sentuh dalam pengembangan game untuk Windows Phone 7 Bagian 1 Dasar-dasar interaksi sentuh

Halaman Diperbarui :
Tanggal pembuatan halaman :

Mulai menggunakan Windows Phone 7

Platform Aplikasi Windows Phone 7

Lingkungan pengembangan Windows Phone 7 secara resmi dirilis pada September 2010, dan smartphone yang benar-benar menjalankan Windows Phone 7 sudah mulai memasuki pasar.

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

Saat Anda membuat aplikasi yang berjalan di Windows Phone 7, Anda dapat memilih antara "Silverlight" dan "XNA Framework" sebagai kerangka kerja program. Secara umum, Anda akan menggunakan "XNA Framework" untuk pengembangan game dan "Silverlight" untuk aplikasi lain seperti alat.

Bagian ini menggunakan XNA Framework untuk pengembangan game dan menjelaskan cara menggunakan panel sentuh, yang akan menjadi antarmuka pengguna yang paling banyak digunakan untuk Windows Phone 7. Penggunaan sederhana dijelaskan dalam bantuan XNA Game Studio, jadi saya ingin menjelaskannya dengan cara yang sedikit lebih mendalam di sini.

Persiapkan lingkungan pengembangan Anda

Bagian ini dari sudut pandang seseorang yang bahkan sedikit menyentuh XNA Game Studio, jadi saya akan menghilangkan instruksi terperinci seperti instalasi dan pengaturan. Ada banyak informasi dalam bantuan yang datang dengan XNA Game Studio dan di web, jadi silakan periksa sendiri. Saya juga memiliki beberapa di situs saya (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Gambar 2: Microsoft Visual Studio 2010 Express untuk Windows Phone (disertakan dalam Windows Phone Developer Tools)

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

Pemrograman! - 1. Dapatkan informasi sentuhan

Tentang sampel ini

Versi XNA Framework yang digunakan di Windows Phone 7 adalah "4.0", tetapi sampai saat itu tidak ada kelas untuk panel sentuh, dan keyboard, mouse, dan gamepad adalah arus utama. Sejak 4.0, Windows Phone 7 telah didukung, dan kelas baru yang didedikasikan untuk panel sentuh telah ditambahkan.

Pada artikel ini, kami terutama akan menjelaskan kelas itu, tetapi pada kenyataannya, jika Anda ingin mendapatkan informasi posisi sentuh sederhana, Anda dapat mengganti kelas lain tanpa menggunakan kelas untuk panel sentuh. Ini adalah kelas "Mouse". Dalam contoh ini, kita akan menggunakan kelas Mouse untuk mendapatkan informasi sentuhan.

Tujuan dari program sampel ini

Saat Anda menyentuh layar, gambar (sprite) ditempatkan sesuai dengan posisi sentuh.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Gambar 3,4: Sprite muncul pada posisi tersentuh

Program - Mendeklarasikan Bidang

Saya ingin menjelaskannya bersama dengan program sampel segera. Penjelasan bagian yang tidak terkait langsung dengan operasi sentuh dan program yang dibuat dari awal dihilangkan, jadi silakan merujuk ke kode sumber yang didistribusikan secara terpisah.

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

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

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

  public Game1()
  {

Bidang mendeklarasikan tekstur untuk menggambar di lokasi sentuh dan variabel struktur Vector2 untuk menyimpan posisi sentuh.

Program - Memuat tekstur

Tekstur sudah ditambahkan ke proyek konten dan dimuat dengan metode LoadContent. Karena konten tidak terkait langsung dengan panel sentuh, penjelasan terperinci dihilangkan.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Gambar 6: Tambahkan Tekstur.png ke proyek konten Anda

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

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

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

Program - Akuisisi Informasi Sentuh

Informasi sentuh diambil dalam metode Game.Update.

Saya mendapatkan informasi sentuh menggunakan kelas "Mouse" alih-alih dari kelas khusus. Saat menggunakan metode "Mouse.GetState", status mouse saat ini dikembalikan dalam struktur "MouseState", sehingga Anda bisa mendapatkan posisi sentuh dari properti "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 hal yang perlu diperhatikan tentang menggunakan kelas Mouse untuk mendapatkan informasi sentuhan adalah bahwa ia hanya mengembalikan informasi sederhana. Satu-satunya batasan pada informasi yang dapat diperoleh saat menggunakan kelas Mouse adalah "single touch only", "touch position (MouseState.X, MouseState.Y property)", dan "whether to touch (MouseState.LeftButton)". Itu tidak mendukung multi-touch atau gerakan. Juga, jika Anda mendapatkan posisi ketika Anda belum menyentuhnya, itu akan terus mengembalikan posisi sentuh sebelumnya. Karena informasi input tidak dapat diterima kecuali jika disentuh, informasi lokasi tidak dapat diperoleh seperti mouseover dengan mouse.

Program - Menggambar Tekstur

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

Karena kelas Mouse menggantikan perolehan informasi sentuhan, informasi hanya dapat diperoleh dengan memperoleh posisi sentuh seperti pada sampel ini. Sebaliknya, jika Anda menggunakan kelas khusus sentuhan, Anda bisa mendapatkan lebih banyak informasi.

Oleh karena itu, bukan tanpa manfaat untuk mendapatkan informasi sentuhan menggunakan kelas Mouse. Menggunakan kelas Mouse memberikan manfaat berikut:

  • Dapat berbagi kode dengan game berkemampuan mouse yang berjalan di Windows
  • Informasi lokasi sentuh dapat ditulis dengan jumlah kode paling sedikit
  • Pemrosesan yang tidak perlu dapat dihilangkan

Jika Anda hanya menggunakan satu sentuhan dan hanya pemosisian sentuhan, Anda dapat memanfaatkan manfaat di atas dengan menggunakan kelas Mouse.