Windows Phone 7 için oyun geliştirmede dokunma etkileşimi Bölüm 1 Dokunma etkileşiminin temelleri

Sayfa güncel :
Sayfa oluşturma tarihi :

Windows Phone 7'yi kullanmaya başlama

Windows Phone 7 Uygulama Platformu

Windows Phone 7 geliştirme ortamı resmi olarak Eylül 2010'da piyasaya sürüldü ve aslında Windows Phone 7 çalıştıran akıllı telefonlar piyasaya çıkmaya başladı.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
Resim 1: HTC tarafından satılan Windows Phone 7 ile HTC 7 Trophy

Windows Phone 7'de çalışan bir uygulama oluşturduğunuzda, program çerçevesi olarak "Silverlight" ve "XNA Framework" arasında seçim yapabilirsiniz. Genel olarak, oyun geliştirme için "XNA Framework" ve araçlar gibi diğer uygulamalar için "Silverlight" kullanacaksınız.

Bu bölüm, oyun geliştirme için XNA Framework'ü kullanır ve Windows Phone 7 için en çok kullanılan kullanıcı arayüzü olacak olan dokunmatik panelin nasıl kullanılacağını açıklar. Basit kullanım XNA Game Studio yardımında açıklanmıştır, bu yüzden burada biraz daha derinlemesine bir şekilde açıklamak istiyorum.

Geliştirme ortamınızı hazırlayın

Bu bölüm, XNA Game Studio'ya hafifçe dokunmuş birinin bakış açısındandır, bu yüzden kurulum ve kurulum gibi ayrıntılı talimatları atlayacağım. XNA Game Studio ile birlikte gelen yardımda ve web'de birçok bilgi var, bu yüzden lütfen kendiniz kontrol edin. Ayrıca sitemde de biraz var (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
Şekil 2: Windows Phone için Microsoft Visual Studio 2010 Express (Windows Phone Geliştirici Araçları'na dahildir)

図 3 :Windows Phone エミュレーター
Şekil 3: Windows Phone Emülatörü

Programlama! - 1. Dokunma bilgilerini alma

Bu örnek hakkında

Windows Phone 7'de kullanılan XNA Framework'ün sürümü "4.0" dır, ancak o zamana kadar dokunmatik paneller için sınıf yoktu ve klavyeler, fareler ve gamepad'ler ana akımdı. 4.0'dan bu yana, Windows Phone 7 destekleniyor ve dokunmatik panellere adanmış yeni bir sınıf eklendi.

Bu yazımızda esas olarak o sınıfı açıklayacağız ama aslında basit bir dokunma konumu bilgisi almak istiyorsanız dokunmatik paneller için sınıf kullanmadan başka bir sınıfı ikame edebilirsiniz. "Mouse" sınıfıdır. Bu örnekte, dokunma bilgilerini almak için Mouse sınıfını kullanacağız.

Bu örnek programın hedefleri

Ekrana dokunduğunuzda, görüntü (hareketli grafik) dokunma konumuna göre yerleştirilir.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
Şekil 3,4: Hareketli grafikler dokunulmuş konumlarda görünüyor

Program - Alanların Bildirilmesi

Hemen örnek programla birlikte açıklamak istiyorum. Dokunma işlemi ile doğrudan ilgili olmayan parçaların açıklamaları ve başlangıçtan itibaren oluşturulan programlar ihmal edilmiştir, bu nedenle lütfen ayrı olarak dağıtılan kaynak koduna bakın.

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

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

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

  public Game1()
  {

Alan, dokunma konumunda çizilecek bir doku ve dokunma konumunu depolamak için bir Vector2 yapı değişkeni bildirir.

Program - Dokuları yükleme

Dokular içerik projesine zaten eklenmiş ve LoadContent yöntemiyle yüklenmiştir. İçerik doğrudan dokunmatik panellerle ilgili olmadığından, ayrıntılı açıklamalar ihmal edilmiştir.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
Şekil 6: İçerik projenize Texture.png ekleme

図 7 :今回サンプルで使用する画像
Şekil 7: Bu örnekte kullanılan görüntü

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

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

Program - Dokunmatik Bilgi Edinme

Dokunma bilgileri Game.Update yöntemiyle alınır.

Dokunma bilgilerini özel bir sınıf yerine "Mouse" sınıfını kullanarak alıyorum. "Mouse.GetState" yöntemini kullanırken, geçerli fare durumu "MouseState" yapısında döndürülür, böylece dokunma konumunu "MouseState.X" ve "MouseState.Y" özelliklerinden alabilirsiniz.

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

Dokunma bilgilerini almak için Mouse sınıfını kullanma hakkında dikkat edilmesi gereken bir nokta, yalnızca basit bilgiler döndürmesidir. Fare sınıfı kullanılırken elde edilebilecek bilgilerle ilgili tek kısıtlamalar "yalnızca tek dokunuş", "dokunma konumu (MouseState.X, MouseState.Y özelliği)" ve "dokunulup dokunulmayacağı (MouseState.LeftButton)" dır. Çoklu dokunma veya hareketleri desteklemez. Ayrıca, dokunmadığınız bir pozisyon alırsanız, önceki dokunma pozisyonunu döndürmeye devam eder. Giriş bilgileri dokunulmadıkça alınamadığından, fare ile fareyle üzerine gelinmesi gibi konum bilgileri alınamaz.

Program - Doku Çizimi

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

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

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

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

  base.Draw(gameTime);
}

Bu örneğin özeti

Fare sınıfı, dokunma bilgilerinin alınmasının yerini aldığından, bilgi yalnızca bu örnekte olduğu gibi dokunma konumu elde edilerek elde edilebilir. Tersine, yalnızca dokunmatik bir sınıf kullanıyorsanız, daha fazla bilgi edinebilirsiniz.

Bu nedenle, Mouse sınıfını kullanarak dokunma bilgisi almak değersiz değildir. Fare sınıfını kullanmak aşağıdaki avantajları sağlar:

  • Windows'ta çalışan fare özellikli oyunlarla kod paylaşabilir
  • Dokunmatik konum bilgileri en az miktarda kodla yazılabilir
  • Gereksiz işlemler ihmal edilebilir

Yalnızca tek dokunuşla ve yalnızca dokunarak konumlandırma kullanıyorsanız, Mouse sınıfını kullanarak yukarıdaki avantajlardan yararlanabilirsiniz.