تعامل لمسی در توسعه بازی برای ویندوز فون 7 قسمت 1 تعامل لمسی اصول اولیه

صفحه به روز شده :
تاریخ ایجاد صفحه :

شروع با ویندوز فون 7

ویندوز فون 7 پلت فرم برنامه

محیط توسعه ویندوز فون ۷ در سپتامبر ۲۰۱۰ به طور رسمی منتشر شد و گوشی های هوشمندی که در واقع ویندوز فون ۷ را اجرا می کنند شروع به ضربه زدن به بازار کرده اند.

図 1 :HTC から販売されている Windows Phone 7 を搭載した「HTC 7 Trophy」
شکل 1: HTC 7 جایزه با ویندوز فون 7 فروخته شده توسط HTC

هنگامی که برنامه ای را ایجاد می کنید که بر روی ویندوز فون ۷ اجرا می شود، می توانید بین "Silverlight" و "XNA Framework" به عنوان چارچوب برنامه انتخاب کنید. به طور کلی، شما از "XNA Framework" برای توسعه بازی و "Silverlight" برای کاربردهای دیگر مانند ابزار استفاده خواهید کرد.

این بخش از چارچوب XNA برای توسعه بازی استفاده می کند و نحوه استفاده از پنل لمسی را توضیح می دهد که بیشترین رابط کاربری برای ویندوز فون ۷ خواهد بود. استفاده ساده در XNA بازی کمک استودیو شرح داده شده است ، بنابراین من می خواهم آن را در راه کمی بیشتر در عمق در اینجا توضیح دهد.

محیط توسعه خود را آماده کنید

این بخش از دید کسی است که حتی کمی XNA Game Studio را لمس کرده است، بنابراین دستورالعمل های دقیقی مانند نصب و راه اندازی را حذف خواهم کرد. بسیاری از اطلاعات در کمک است که همراه با XNA بازی استودیو و در وب وجود دارد, بنابراین لطفا آن را بررسی کنید خودتان. من هم برخی در سایت من (http://sorceryforce.com/xna/).

図 2 :Microsoft Visual Studio 2010 Express for Windows Phone(Windows Phone Developer Tools に含まれます)
شکل 2: مایکروسافت ویژوال استودیو 2010 اکسپرس برای ویندوز فون (در ویندوز تلفن ابزار توسعه دهنده گنجانده شده)

図 3 :Windows Phone エミュレーター
شکل 3: شبیه ساز ویندوز فون

برنامه نویسی! - 1. دریافت اطلاعات لمسی

درباره این نمونه

نسخه XNA Framework که در ویندوز فون ۷ استفاده می شود "۴٫۰" است، اما تا آن زمان هیچ کلاسی برای پنل های لمسی وجود نداشت و کیبوردها، موش ها، و پدهای بازی جریان اصلی بودند. از 4.0، ویندوز فون 7 پشتیبانی شده است، و یک کلاس جدید اختصاص داده شده به پانل های لمسی اضافه شده است.

در این مقاله به طور عمده آن کلاس را توضیح خواهیم داد اما در واقع اگر می خواهید اطلاعات موقعیت لمسی ساده ای دریافت کنید، می توانید بدون استفاده از کلاس برای پنل های لمسی، کلاس دیگری را جایگزین کنید. این کلاس "موش" است. در این نمونه از کلاس Mouse برای دریافت اطلاعات لمسی استفاده خواهیم کرد.

اهداف این برنامه نمونه

هنگامی که صفحه نمایش را لمس می کنید، تصویر (sprite) با توجه به موقعیت لمسی قرار می گیرد.

図 3,4 :タッチした位置にスプライトが表示される 図 3,4 :タッチした位置にスプライトが表示される
شکل 3,4: Sprites در موقعیت های لمس شده ظاهر می شود

برنامه - اعلام زمینه ها

من می خواهم آن را همراه با برنامه نمونه فورا توضیح دهد. توضیحات قطعاتی که ارتباط مستقیمی با عملیات لمسی و برنامه های ایجاد شده از ابتدا ندارد حذف می شوند، بنابراین لطفاً به کد منبع توزیع شده به صورت جداگانه مراجعه کنید.

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

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

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

  public Game1()
  {

فیلد یک بافت را برای ترسیم در محل لمسی و یک متغیر ساختار Vector2 برای ذخیره موقعیت لمسی اعلام می کند.

برنامه - بارگذاری بافت

بافت ها در حال حاضر به پروژه محتوا اضافه شده و با روش LoadContent لود شده است. از آنجا که محتوا ارتباط مستقیمی با پنل های لمسی ندارد، توضیحات دقیق حذف می شوند.

図 6 :コンテンツプロジェクトに「Texture.png」を追加しておく
شکل 6: افزودن یک بافت.png پروژه محتوایی شما

図 7 :今回サンプルで使用する画像
شکل 7: تصویر مورد استفاده در این نمونه

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

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

برنامه - کسب اطلاعات لمسی

اطلاعات لمسی در روش Game.Update بازیابی می شود.

من گرفتن اطلاعات لمسی با استفاده از کلاس "ماوس" به جای از یک کلاس اختصاص داده شده است. هنگام استفاده از روش "Mouse.GetState"، حالت ماوس فعلی در ساختار "MouseState" بازگردانده می شود، بنابراین شما می توانید موقعیت لمسی را از خواص "MouseState.X" و "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);
}

یک چیز به توجه داشته باشید در مورد استفاده از کلاس ماوس برای دریافت اطلاعات لمسی این است که آن را تنها بازگشت اطلاعات ساده است. تنها محدودیت هایی که در مورد اطلاعاتی که می توان هنگام استفاده از کلاس ماوس به دست آورد،"تنها لمس تک"، "موقعیت لمسی (MouseState.X، MouseState.Y property)"، و "یا نه برای لمس کردن (MouseState.LeftButton)". از چند لمس یا ژست حمایت نمی کند. همچنین اگر زمانی که به آن دست نزده باشید موقعیتی دریافت کنید، به بازگشت موقعیت لمسی قبلی ادامه خواهد داد. از آنجا که اطلاعات ورودی را نمی توان دریافت کرد مگر اینکه لمس شود، اطلاعات مکان را نمی توان مانند mouseover توسط ماوس به دست آورد.

برنامه - نقاشی بافت

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

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

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

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

  base.Draw(gameTime);
}

خلاصه این نمونه

از آنجا که کلاس ماوس جایگزین کسب اطلاعات لمسی می شود، اطلاعات تنها با به دست آوردن موقعیت لمسی مانند این نمونه می تواند به دست آید. برعکس، اگر از یک کلاس تنها لمسی استفاده کنید، می توانید اطلاعات بیشتری دریافت کنید.

بنابراین، آن را بدون شایستگی برای دریافت اطلاعات لمسی با استفاده از کلاس ماوس نیست. با استفاده از کلاس ماوس مزایای زیر را فراهم می کند:

  • می تواند کد را با ماوس فعال بازی در حال اجرا بر روی ویندوز به اشتراک بگذارید
  • اطلاعات مکان لمسی را می توان با کمترین مقدار کد نوشت
  • پردازش غیر ضروری را می توان حذف کرد

اگر فقط از تک لمسی استفاده می کنید و فقط موقعیت یابی را لمس می کنید، می توانید با استفاده از کلاس ماوس از مزایای فوق استفاده کنید.