ونڈوز فون 7 حصہ 2 ملٹی ٹچ کے لئے کھیل کی ترقی میں ٹچ تعامل

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

پروگرامنگ! - 2. کثیر رابطے کی کوشش کریں

اس نمونے کے بارے میں

یہاں ، میں ملٹی ٹچ ان پٹ کو سمجھنے کے لئے پروگرام کی وضاحت کرنا چاہوں گا۔ ونڈوز فون 7 میں ، ٹچ پینل کے ذریعہ ملٹی ٹچ ان پٹ صارف کے ان پٹ کے لئے سب سے اہم اشیاء میں سے ایک ہے۔ اس کی وجہ یہ ہے کہ ، ونڈوز اور ایکس بکس 360 کے برعکس ، مرکزی ان پٹ انٹرفیس "ٹچ پینل" ہے۔ کی بورڈ کے ساتھ ونڈوز فون ہوسکتے ہیں ، لیکن یقینا ان کے پاس ہمیشہ نہیں ہوتا ہے۔ لہذا ، کھیل کو کسی بھی ونڈوز فون پر کام کرنے کے لئے ، اسے چھونے کے قابل ہونے کی ضرورت ہے۔

اگر آپ ٹچ پینل کو صرف "سنگل ٹچ" تک محدود کرتے ہیں تو ، جب کھیل بنانے کی بات آتی ہے تو بنائے جانے والے کھیلوں کی اقسام لامحالہ محدود ہوجائیں گی۔ ہینڈ ہیلڈ گیم کنسول کے بارے میں سوچیں (آپ اسے اسٹیشنری چھوڑ سکتے ہیں)۔ زیادہ تر گیم کنسولز کے لئے آپ کو گیم کنٹرولر (یا اصل کنسول) کو دونوں ہاتھوں سے تھامنے اور ایک ہی وقت میں متعدد بٹن دبانے کی ضرورت ہوتی ہے۔

ونڈوز فون 7 میں گیم کنٹرولرز کی طرح زیادہ بٹن نہیں ہیں ، اور ضروری نہیں کہ اس میں کی بورڈ ہو۔ لہذا ، ورچوئل چابیاں اور بٹن اسکرین پر رکھے جاسکتے ہیں ، اور ان کو دباتے وقت ، یہ تکلیف دہ ہوتا ہے کیونکہ انہیں صرف ایک ٹچ کے ساتھ بیک وقت نہیں دبایا جاسکتا ہے۔

یقینا ، مذکورہ بالا ورچوئل بٹن کی مثال کے علاوہ ، ملٹی ٹچ ان کھیلوں کے لئے ضروری ہے جہاں ایک سے زیادہ لوگ ایک اسکرین چلاتے ہیں ، جیسے "چوٹکی اور کھینچیں (دو پوائنٹس کو قریب یا دور منتقل کریں)" جو ملٹی ٹچ میں عام ہے۔

ویسے، تعارف طویل ہے، لیکن اس نمونے میں، میں پینل کو چھونے کے لئے وقف کلاس کا استعمال کرتے ہوئے کثیر رابطے کی معلومات حاصل کرنا چاہتا ہوں. ایک نمونہ بنانے میں مزہ آتا ہے جو اچانک ملٹی ٹچ کے ساتھ کھیلا جاسکتا ہے ، لیکن پہلے میں یہ جاننا چاہتا ہوں کہ ملٹی ٹچ کے ساتھ کس طرح کی معلومات حاصل کی جاسکتی ہیں۔ کچھ عادات ہوتی ہیں، اس لیے انہیں پہلے جان کر آپ اس کی وجہ کی چھان بین میں صرف ہونے والے وقت کو کم کر سکتے ہیں، جیسے کہ جب یہ بعد میں پروگرامنگ میں اچھی طرح سے کام نہیں کرتا۔

اس نمونے کے پروگرام کے اہداف

جب ملٹی ٹچ کیا جاتا ہے تو معلومات کو ڈسپلے اور تصدیق کریں۔

図 1 :タッチしたときにタッチ情報がテキストで表示される
شکل 1: ٹچ کی معلومات کو چھونے پر متن کے طور پر دکھایا جاتا ہے

پروگرام - قطعات کا اعلان

فیلڈز کو ٹچ پینل صلاحیتوں کی ساخت اور ٹچ کلیکشن اسٹرکچر کا لیبل لگانا ضروری ہے۔

/// <summary>
///  スプライトでテキストを描画するためのフォント
/// </summary>
SpriteFont font;

/// <summary>
///  タッチパネルの機能情報
/// </summary>
TouchPanelCapabilities capabilities;

/// <summary>
///  取得したタッチ情報の一覧
/// </summary>
TouchCollection touches;

"ٹچ پینل صلاحیتوں کی ساخت" ایک ایسا ڈھانچہ ہے جس میں ٹچ پینل کے افعال خود پیرامیٹرز کے طور پر ہوسکتے ہیں۔ یہ چیک کرنے کے لئے استعمال کیا جاتا ہے کہ آیا اپ ڈیٹ کرنے کے دوران ٹچ پینل استعمال کیا جاسکتا ہے۔

ٹچ کلیکشن ڈھانچے میں فی الحال چھونے والی حالت کے بارے میں معلومات کی ایک فہرست شامل ہے۔ اگر ایک سے زیادہ چھونے کا پتہ چلتا ہے تو ، ایک سے زیادہ "ٹچ لوکیشن ڈھانچے" کو بازیافت کیا جاسکتا ہے۔ اس کے بارے میں مزید بعد میں.

پروگرام - فونٹس لوڈ کر رہا ہے

اسکرین پر متن ڈرائنگ کرنے سے پہلے ، فونٹ کی تعریف کو اپنے مواد کے منصوبے میں شامل کریں اور اسے گیم.لوڈ کنٹینٹ طریقہ کار کے ساتھ لوڈ کریں۔ یہ براہ راست ٹچ پینل سے متعلق نہیں ہے، لہذا میں ایک تفصیلی وضاحت کو چھوڑ دوں گا.

図 2 :コンテンツプロジェクトに「Font.spritefont」を追加しておく
شکل 2: اپنے مواد کے منصوبے میں "فونٹ.سپرائٹ فونٹ" شامل کریں

// フォントをコンテンツパイプラインから読み込む
font = Content.Load<SpriteFont>("Font");

پروگرام - ٹچ پینل کی معلومات حاصل کریں

گیم.اپ ڈیٹ کے طریقہ کار کے اندر ٹچ پینل کی معلومات حاصل کریں۔

// タッチパネルの機能情報を取得
capabilities = TouchPanel.GetCapabilities();

// タッチパネルが使用可能であるかチェック
if (capabilities.IsConnected)
{
  // 現在のタッチパネルの入力情報を取得
  touches = TouchPanel.GetState();
}

ٹچ پینل کی فنکشن کی معلومات حاصل کرنے کے لئے آپ "ٹچ پینل.گیٹ کیپیبلٹیز" کے طریقہ کار پر کال کرسکتے ہیں۔ معلومات کی دو اقسام ہیں جو حاصل کی جاسکتی ہیں: "کیا ٹچ پینل استعمال کیا جاسکتا ہے؟" اور "ٹچ پینل کے ذریعہ حاصل کردہ ٹچ پوائنٹس کی زیادہ سے زیادہ تعداد۔ کھیل کے دوران ان میں سے کوئی بھی تبدیل نہیں ہوتا ہے ، لہذا مجھے لگتا ہے کہ اگر آپ اسے گیم کے مطابق حاصل کرتے ہیں تو کوئی مسئلہ نہیں ہے۔ ابتدائی طریقہ کار ، لیکن مستقبل میں ، وہ آلات جو ٹچ پینل کو ہٹا سکتے ہیں (ٹچ پینل جو ونڈوز فون کے علاوہ یو ایس بی یا اصل آلات سے منسلک ہوسکتا ہے) ظاہر ہوتا ہے ، اور اسے اپ ڈیٹ کے طریقہ کار میں بیان کیا گیا ہے۔

نیز ، یہ چیک کرنے کی ضرورت نہیں ہے کہ آیا ٹچ پینل استعمال کیا جاسکتا ہے کیونکہ اسے ہمیشہ ونڈوز فون 7 پر استعمال کیا جاسکتا ہے ، لیکن ونڈوز اور ایکس بکس 360 کے ساتھ کوڈ شیئر کرتے وقت ، ان ہارڈ ویئر کو ان پٹ انٹرفیس کی ضرورت نہیں ہوتی ہے اور اسے چیک کرنے کی ضرورت ہوتی ہے۔

اگر آپ اس بات کی تصدیق کرسکتے ہیں کہ ٹچ پینل "ٹچ پینل صلاحیتیں.منسلک ہے" پراپرٹی میں دستیاب ہے تو ، "ٹچ پینل.گیٹ اسٹیٹ" طریقہ کار کو موجودہ ٹچ حالت مل جاتی ہے۔

اصل میں ، ٹچ کی معلومات حاصل کرنے کے بعد کچھ آپریشن پروسیسنگ انجام دی جاتی ہے ، لیکن اس نمونے میں ، معلومات صرف ظاہر ہوتی ہے ، لہذا گیم اپ ڈیٹ کے طریقہ کار میں مزید پروسیسنگ نہیں کی جاتی ہے۔

پروگرام - ٹچ پوائنٹس کی زیادہ سے زیادہ تعداد حاصل کریں جو آپ حاصل کرسکتے ہیں۔

بازیافت کیے جانے والے ٹچ پوائنٹس کی زیادہ سے زیادہ تعداد تقریبا طے شدہ ہے ، لہذا کھیل کے دوران ان کو بازیافت کرنا اکثر ضروری نہیں ہوتا ہے ، لیکن آپ ٹچ پوائنٹس کی زیادہ سے زیادہ تعداد حاصل کرسکتے ہیں جو ٹچ پینل کی صلاحیتوں سے بازیافت کیے جاسکتے ہیں۔ مثال کے طور پر ، اگر زیادہ سے زیادہ ٹچ کاؤنٹ پراپرٹی "4" ہے تو ، آپ ٹچ پینل کو پانچ انگلیوں سے چھو کر پانچویں پوزیشن کی معلومات حاصل نہیں کرسکتے ہیں۔

اس نمونے میں استعمال ہونے والے اسمارٹ فون "ایچ ٹی سی 7 ٹرافی" کے حصول کی تعداد "4" تھی۔ (ویسے ، ایکس این اے گیم اسٹوڈیو 4.0 کو ہمیشہ 4 واپس کرنے کے لئے بیان کیا گیا ہے۔ ونڈوز فون 7 کی تفصیلات کا کہنا ہے کہ یہ 4 پوائنٹس سے زیادہ ہے ، لہذا یہ 4 سے کم واپس نہیں آتا ہے۔

// タッチ可能な最大数を表示
spriteBatch.DrawString(font,  
                       "MaximumTouchCount : " +
                         capabilities.MaximumTouchCount,
                       new Vector2(20, 50),
                       Color.LightGreen);

図 3 :TouchPanelCapabilities.MaximumTouchCount プロパティの取得数
شکل 3: ٹچ پینل کی صلاحیتیں.زیادہ سے زیادہ ٹچ کاؤنٹ پراپرٹی بازیافت گنتی

پروگرام - رابطے کی معلومات حاصل کریں

بازیافت شدہ ٹچ کلیکشن ڈھانچہ ایک سے زیادہ ٹچ معلومات پر مشتمل ہے۔ مثال کے طور پر ، اگر آپ دو انگلیوں سے چھوتے ہیں تو ، اس میں عام طور پر دو رابطے ہوتے ہیں۔

ٹچ معلومات کی تعداد کو ٹچ کلکشن.کاؤنٹ پراپرٹی میں بازیافت کیا جاسکتا ہے۔ ٹچ کی معلومات کو بار بار بیان کے لئے دکھایا جاتا ہے جتنی بار یہ حاصل کیا جاتا ہے. اصل میں ، فورچ کے ساتھ لوپ کرنے میں کوئی مسئلہ نہیں ہے ، لیکن چونکہ ہم بعد کی وضاحت میں سرنی انڈیکس (انٹ انڈیکس) کا استعمال کریں گے ، لہذا ہم اسے لوپ کرتے ہیں۔

// タッチ情報の数だけループする
for (int index = 0; index < touches.Count; index++)
{
  // 指定したインデックスのタッチ情報取得
  TouchLocation tl = touches[index];

  // タッチ情報を可視化
  string mes = "Index : " + index + Environment.NewLine +
               "Id : " + tl.Id + Environment.NewLine +
               "Position : " + tl.Position + Environment.NewLine +
               "State : " + tl.State;

  // 文字の描画
  spriteBatch.DrawString(font,
                         mes,
                         new Vector2(30 + (index % 4) * 10,
                                     80 + index * 140),
                         Color.White);
}

اب ، ہر ٹچ کی معلومات کو "ٹچ لوکیشن" ڈھانچے کے طور پر حاصل کیا جاتا ہے۔ اگر اس کے ساتھ لوپنگ ہے تو ، اسے "ٹچ کلیکشن [انڈیکس]" کے ساتھ حاصل کیا جاسکتا ہے۔ (آپ براہ راست "ٹچ لوکیشن" ڈھانچہ بھی حاصل کرسکتے ہیں۔

مندرجہ ذیل چار اقسام کی معلومات "ٹچ لوکیشن" ڈھانچے سے حاصل کی جاسکتی ہیں ، اور ہر معلومات نمونے میں ظاہر ہوتی ہے۔

جب آپ اصل میں اسے چلاتے ہیں تو ، ٹچ کی معلومات نیچے دکھائے گئے مطابق ظاہر ہوتی ہے۔ چونکہ آپ تین انگلیوں سے چھو رہے ہیں ، لہذا آپ تین ٹچ دیکھ سکتے ہیں۔ ویسے ، اگر آپ پانچ انگلیوں سے چھوتے ہیں تو ، آپ کو صرف چار تک نظر آئے گا۔ (کیونکہ حصول کی زیادہ سے زیادہ تعداد 4 ہے)

図 4 :3 本の指でタッチしているところ
شکل 4: تین انگلیوں سے چھونا

پروگرام - رابطے کی معلومات 1 (انڈیکس اور آئی ڈی) بازیافت کرتے وقت دیکھنے کے لئے چیزیں

میں نے اوپر ذکر کیا ہے کہ رابطے کی معلومات سے نمٹنے کے دوران ذہن میں رکھنے کے لئے چیزیں موجود ہیں، لیکن سب سے پہلے "انڈیکس" اور "آئی ڈی" ہے. ایک انڈیکس صرف ایک سرنی انڈیکس سے مراد ہے.

مجھے لگتا ہے کہ اگر آپ اسے تحریری طور پر وضاحت کرنے کے بجائے کسی حقیقی مشین پر آزماتے ہیں تو اسے سمجھنا آسان ہے۔ مثال کے طور پر ، فرض کریں کہ آپ دو انگلیوں ، "شہادت کی انگلی" اور "درمیانی انگلی" کے ساتھ کام کرتے ہیں ، اور پہلے اپنی شہادت کی انگلی سے چھوتے ہیں۔

図 5 :人差し指でタッチ
شکل 5: شہادت کی انگلی کے ساتھ ٹچ

جیسا کہ اسکرین پر دکھایا گیا ہے ، انڈیکس "0" ہوگا۔ پھر اسے اپنی درمیانی انگلی سے چھوئیں۔

図 6 :中指でタッチ
شکل 6: درمیانی انگلی ٹچ

اس حالت میں ، آپ دو انگلیوں سے چھو رہے ہیں ، لہذا معلومات کے دو ٹکڑے دکھائے جاتے ہیں۔ درمیانی انگلی سے چھوا گیا انڈیکس "1" ہے۔

آئیے یہاں اپنی شہادت کی انگلی اٹھائیں۔ اس کے بعد ٹچ کی معلومات مندرجہ ذیل کی طرح نظر آئے گی۔

図 7 :人差し指を放す
شکل 7: اپنی شہادت کی انگلی جاری کریں

جیسا کہ آپ نے اب تک محسوس کیا ہوگا ، آپ اپنی درمیانی انگلی سے جس معلومات کو چھو رہے ہیں اس کا اشاریہ "0" ہے۔ اگر آپ کریکٹر کو اشاریہ کے ذریعہ منظم کرتے ہیں جب آپ اسے منتقل کرتے ہیں تو ، مندرجہ بالا آپریشن مندرجہ ذیل کارروائیوں کا باعث بنے گا۔

⦁ اپنی شہادت کی انگلی سے حرف "اے" کو منتقل کریں

⦁ اس حالت میں درمیانی انگلی کے ساتھ کردار "بی" کو منتقل کریں۔

⦁ درمیانی انگلی کے ساتھ کردار کو منتقل کرتے ہوئے شہادت کی انگلی کو جاری کریں

درمیانی انگلی کے ذریعہ کنٹرول کردہ کردار اچانک "اے" میں تبدیل ہوجاتا ہے۔

ایک اور رجحان یہ ہے کہ اگر آپ بار بار دونوں انگلیوں میں سے کسی ایک کو چھوتے ہوئے ان کو جاری کرتے ہیں یا چھوتے ہیں تو ، پہلی رابطے کی معلومات کا ڈرائنگ متن چمک سکتا ہے۔ اس کی وجہ یہ ہے کہ دوسری انگلی انڈیکس "0" کو اس لمحے میں مداخلت کرتی ہے جب آپ اسے چھوتے ہیں یا جاری کرتے ہیں۔

جیسا کہ اوپر ذکر کیا گیا ہے ، انڈیکس اور ٹچ کی معلومات کی ترتیب جب ملٹی ٹچ اس ترتیب سے میل نہیں کھاتی ہے جس میں انہیں چھوا جاتا ہے۔ لہذا ، اگر آپ کوئی آپریشن انجام دینا چاہتے ہیں تو ، ٹچ کلیکشن انڈیکس میں ان کا انتظام نہ کریں۔

جس چیز کا انتظام کیا جانا چاہئے وہ یہ ہے کہ "ٹچ لوکیشن" ڈھانچے میں "آئی ڈی" پراپرٹی ہے ، اور جب بھی اسے چھوا جاتا ہے تو آئی ڈی کو ایک نئی قدر کے ساتھ دوبارہ لکھا جاتا ہے ، لیکن چھونے کے دوران ٹچ پوائنٹ اور آئی ڈی کے مابین تعلقات کی ضمانت دی جاتی ہے ، لہذا ہم اس کا انتظام کریں گے۔

یقینا ، اس کا مطلب یہ نہیں ہے کہ آپ کو آئی ڈی کے ذریعہ اس کا انتظام کرنا ہوگا ، اور کچھ معاملات میں ، صرف ٹچ پوزیشن ہی کافی ہے۔ مثال کے طور پر ، اگر آپ صرف اسکرین پر کسی بٹن کو چھوتے ہیں تو ، آپ اس بات کا تعین کرسکتے ہیں کہ آپ نے آئی ڈی سے قطع نظر ٹچ پوزیشن کی جانچ کرکے ایک بٹن دبایا ہے۔ تاہم ، ڈریگ پروسیسنگ کو شامل کرتے وقت ، پوزیشن ہمیشہ تبدیل ہوجاتی ہے ، لہذا مجھے لگتا ہے کہ اس کا تعین اب بھی آئی ڈی کے ذریعہ کیا جانا چاہئے۔

پروگرام - رابطے کی معلومات حاصل کرتے وقت ذہن میں رکھنے کے لئے چیزیں 2 (حاصل کردہ رابطے کی معلومات کی تعداد)

اگرچہ یہ مضمون کے پروگرام میں شامل نہیں ہے ، لیکن نمونہ اسکرین کے نچلے حصے میں "گیٹ میکس ٹچ کاؤنٹ" اور "ایک ہی وقت میں حاصل کردہ ٹچ معلومات کی زیادہ سے زیادہ تعداد" کی تار کھینچتا ہے۔ اس نے ماضی میں "ٹچ پینل.گیٹ اسٹیٹ" طریقہ کار کے ذریعہ حاصل کردہ ٹچ معلومات کی زیادہ سے زیادہ تعداد ظاہر کی ہے ، لیکن اس ٹیسٹ مشین میں ، "ٹچ پینل صلاحیتیں.زیادہ سے زیادہ ٹچ کاؤنٹ" پراپرٹی 4 ہے ، لہذا یہاں ظاہر ہونے والی زیادہ سے زیادہ قیمت عام طور پر 4 ہونی چاہئے۔ اگر آپ اس پر پانچ انگلیاں ڈالیں تو ، یہ اب بھی 4 ہوگا۔

図 8 :5 本の指を置いたときの数値
شکل 8: پانچ انگلیوں کا نمبر

چلو ایک چھوٹا سا تجربہ کرتے ہیں. تیز رفتار پر متعدد انگلیوں کے ساتھ ٹچ پینل کو دہرانے کی کوشش کریں۔ یہ ٹیسٹ مشین پر منحصر ہے، لیکن آپ کو معلوم ہونے سے پہلے یہ تعداد 4 سے تجاوز کر سکتی ہے.

図 9 :GetMaxTouchCount が 4 を超えている
شکل 9: گیٹ میکس ٹچ کاؤنٹ 4 سے بڑا ہے

در حقیقت ، "ٹچ پینل ڈاٹ گیٹ اسٹیٹ" طریقہ کار کے ذریعہ حاصل کردہ ٹچ کی معلومات "ٹچ پینل ڈاٹ گیٹ اسٹیٹ" طریقہ کار کو کال کرنے کے وقت ٹچ کی معلومات نہیں ہے ، لیکن جس لمحے آپ اسے چھوتے ہیں اور جس لمحے آپ اسے آخری اپ ڈیٹ ٹائمنگ سے جاری کرتے ہیں اسے کیش کیا جاتا ہے۔ لہذا ، اگرچہ ایک ہی وقت میں چار ٹچز کا پتہ لگایا جاسکتا ہے ، لیکن ایک ہی انگلی کو دوبارہ چھونے کو ایک علیحدہ ٹچ کے طور پر سمجھا جاتا ہے ، لہذا ٹچ پینل کی صلاحیتوں کے مقابلے میں زیادہ ٹچ معلومات حاصل کی جاسکتی ہیں۔

لہذا ، یہاں تک کہ اگر ٹچ پینل کی صلاحیتیں.زیادہ سے زیادہ ٹچ کاؤنٹ 4 ہے ، اگر ٹچ سے متعلق ڈیٹا کے سرنی عناصر کی تعداد 4 سے طے کی گئی ہے تو ، پروسیسنگ کے طریقہ کار پر انحصار کرتے ہوئے انڈیکس اوور ایج کی غلطی ہوسکتی ہے۔

ویسے ، ایکس این اے گیم اسٹوڈیو کی مدد سے ، ٹچ کلیکشن.کاؤنٹ پراپرٹی کی زیادہ سے زیادہ قیمت کو "8" کے طور پر بیان کیا گیا ہے ، لہذا اگر آپ سرنی میں عناصر کی تعداد کو ٹھیک کرنا چاہتے ہیں تو ، آپ کو عناصر کی تعداد کو کم از کم 8 پر سیٹ کرنا چاہئے۔ (اگر آپ مستقبل کے ورژن اپ گریڈ کے بارے میں سوچتے ہیں تو ، آپ گارڈ شق شامل کرنا چاہتے ہیں تاکہ انڈیکس ختم نہ ہو۔

اس نمونے کا خلاصہ

اس بار، ہم نے ملٹی ٹچ سے حاصل کردہ معلومات کے لئے مختلف پیرامیٹرز کی جانچ پڑتال کی. ہم نے اس بات کی بھی تصدیق کی ہے کہ ٹچ پینل کی معلومات حاصل کرتے وقت ذہن میں رکھنے کے لئے کچھ نکات موجود ہیں۔ اس علم کی بنیاد پر ، میں ایک ایسے نمونے کی وضاحت کرنا چاہوں گا جو اصل میں ملٹی ٹچ کا استعمال کرتا ہے۔