Windows Phone 7 için oyun geliştirmede dokunma etkileşimi Bölüm 1 Dokunma etkileşiminin temelleri
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ı.
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/).
- Windows Phone Geliştirici Araçları
- Zune Yazılımı
- Windows Phone 7 veya Windows 7 çoklu dokunmatik ortam çalıştıran gerçek bir cihaz
- Windows Phone Geliştirici Kayıt Uygulaması
Şekil 2: Windows Phone için Microsoft Visual Studio 2010 Express (Windows Phone Geliştirici Araçları'na dahildir)
Ş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.
Ş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.
Şekil 6: İçerik projenize Texture.png ekleme
Ş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.