به کارگاه ترجمه ی سینا2 خوش آمدید!

تبلیغات شما در اینجا بالا

نوشتن یک کلاس برای دسته بازی

 

 با داشتن کلاس SerialDevice که در صفحه ی 274 در مقاله ی نوشتن یک کلاس SerialDevice در مورد آن صحبت کرده ایم، به سادگی می توانیم کلاسی به نام  GameController ایجاد کنیم که دسترسی ما به برد آردوینوی سنجش حرکت را ساده تر می کند. در زیر، تابع کانستراکتور(سازنده) آن را مشاهده می کنید:

var GameController = function(path, threshold) {
  this.arduino = new SerialDevice(path);
  this.threshold = threshold || 325;
  this.moveLeft = false;
  this.moveRight = false;
  this.buttonPressed = false;
  this.boundOnReadLine = this.onReadLine.bind(this);
  this.arduino.onReadLine.addListener(this.boundOnReadLine);
  this.arduino.connect();
}

 در تابع بالا چند پروپرتی(properties) تعریف شده است. هر پروپرتی مانند یک متغیر عمل می کند. در خط شماره 2،  ابتدا یک پروپرتی به نام arduino تعریف کردیم و یک کپی جدید با استفاده از کلمه ی new،  از شیء SerialDevice ایجاد کردیم و در داخل پروپرتی مذکور قرار دادیم.  درخط شماره 3، نیز برای محور x از دسته ی بازی، یک پروپرتی به نام threshold (آستانه) ایجاد کرده ایم. برای اینکه بررسی کنیم که آیا یک کاربر دسته ی بازی را به سمت چپ یا راست کج کرده است یا نه، باید resting point دسته(controller’s resting point) را بشناسیم.

در زیر منظور از تلرانس چیست؟

 به جای اینکه به دنبال resting point صحیح بگردیم، ما تعدادی تلرانس(tolerance) را اضافه می کنیم، و این همان مقداری است که می خواهیم بعداً  در آستانه(threshold) ذخیره  کنیم. هر سه پروپرتی بعدی مقادیر بولین(Boolean) هستند که حالت فعلی دسته ی بازی را مشخص می کنند. اگر مقدار پروپرتی moveLeft برابر با true باشد، کاربر دسته ی بازی را به سمت چپ حرکت داده است. در نهایت ما شنونده ی رویداد onReadLine   را در شیء SerialDevice قرار می دهیم و از ترفندهای معمولی خودمان استفاده می کنیم.  شنونده ی رویداد onReadLine داده هایی که از آردوینو دریافت می کنیم را تفسیر می کند:

GameController.prototype.onReadLine = function(line) {
  const TOLERANCE = 5;
  var attr = line.trim().split(' ');
  if (attr.length == 4) {
    this.moveRight = false;
    this.moveLeft = false;
    var x = parseInt(attr[0]);
    if (x <= this.threshold - TOLERANCE) {
      this.moveLeft = true;
    } else if (x >= this.threshold + TOLERANCE) {
      this.moveRight = true;
    }

    this.buttonPressed = (attr[3] == '1');
  }
  var message = 'moveLeft(' + this.moveLeft + '), ' + 
    'moveRight (' + this.moveRight + '), ' +
    'buttonPressed(' + this.buttonPressed + ')';
  console.log(message);
  document.getElementById('output').innerText = message;
}

var gc = new GameController('/dev/tty.usbmodem24311');

  این متد، آرگومان line را دریافت می کند  و  به هر کاراکتر خالی، که می رسد، رشته رامی شکند و تجزیه می کند. سپس بررسی می کند که این line دقیقا حاوی چهار خصوصیت(attributes) است یا نه. اگر جواب بله باشد، بررسی می کند که آیا موقعیت فعلی X در سمت چپ(left) یا در سمت راست(right)، از نقطه ی اوج(tipping point) دسته ی بازی باشد.

توجه کنید که ما در اینجا، از مقدار آستانه(threshold) برای نرم تر کردن جهت حرکت(movement detection) استفاده می کنیم. در نهایت، این متد بررسی می کند که آیا دکمه ی دسته در حال حاضر فشار داده شده است یا نه.  همچنین حالت فعلی دسته ی بازی را در کنسول(console) چاپ می کند. ضمناً اگر بعدا می خواهید بازی را با استفاده از یک دسته بازی نینتندو وی مدل Nunchuk  کنترل کنید، تنها کافیست کلاس GameController را تنظیم کنید(برای مشاهده ی روش این کار به ص 145 کتاب مراجعه کنید).

در تصویر 22، دسته ی بازی ما با یک اپلیکیشن کروم ارتباط برقرار می کند؛ در صفحه 114 می توانید خروجی(output) یک اپلیکیشن کروم که حالت دسته ی بازی را در کنسول جاوا اسکریپت نشان می دهد، مشاهده کنید.  اکنون ما می توانیم به راحتی اپلیکیشن های کروم را با دسته ی بازی حسگر حرکت خود کنترل کنیم. در بخش بعدی، خواهید آموخت که چگونه یک  اپلیکیشن پیشرفته تر را با استفاده از این تکنیک ها ایجاد کنید.

 

 (تصویر 22--دسته ی بازی با یک اپلیکیشن کروم ارتباط برقرار کرده است)

 

!Donate

نوشتن دیدگاه

لطفا نظرات خود را بیان کنید. به سوالات در سریع ترین زمان پاسخ داده خواهد شد.اما به نکات زیر توجه کنید:
1. سعی کنید نظرات شما مرتبط با مقاله ی مورد نظر باشد، در غیر این صورت پاسخ داده نخواهد شد.
2. سوالات خود را به صورت کوتاه بیان کنید و از پرسیدن چند سوال به طور همزمان خودداری کنید.
3. سوال خود را به طور واضح بیان کنید و از کلمات مبهم استفاده نکنید.


تصویر امنیتی
تصویر امنیتی جدید

ستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعالستاره غیر فعال