ورودی طبیعی را در تمام عوامل شکل فعال کنید

کامپیوتر رومیزی با صفحه کلید و ماوس. بازی روی صفحه است و ورودی های صفحه لمسی را برای کنترل جهت و ماوس نشان می دهد.
شکل 1. ورودی های صفحه کلید، ماوس و صفحه لمسی.

دستگاه های اندرویدی در اشکال و اندازه های مختلفی تولید می شوند. با فعال کردن بازیکنان خود در هر جایی که می خواهند بازی کنند، چه تلفن، تبلت، رایانه شخصی، تلویزیون، ماشین یا هدست XR، دامنه بازی خود را افزایش دهید. در اینجا یاد خواهید گرفت:

سازگاری خودکار

Android در صورت امکان سازگاری غیر لمسی خودکار دارد، به عنوان مثال:

  • dispatchTouchEvent / onTouchEvent با رویدادهای حرکتی حتی برای کلیک ها یا ورودی قلم پاسخ می دهد. این بدان معنی است که اگر نوع ابزار را بررسی نکنید، منطق کنترل لمسی شما باید با ماوس و قلم کار کند.
  • برخی از گیم‌پدهای کنترل نشده و رویدادهای کنترل‌کننده تلویزیون به‌عنوان رویدادهای صفحه‌کلید دوباره منتشر می‌شوند.
  • فاکتورهای فرم مانند رایانه شخصی مانند Play Games و ChromeOS به طور پیش فرض برای ایجاد لمس از طریق کلیک ماوس. از آنجایی که ممکن است صفحه نمایش لمسی وجود نداشته باشد که دوباره روی آن بیفتید، این یک سطح پایه از سازگاری را فراهم می کند.

  • رویدادهای ماوس و قلم برای لمس تماس‌ها ارسال می‌شوند.

  • رویدادهای دسته‌بندی نشده گیم‌پد و کنترل‌کننده تلویزیون به‌عنوان رویدادهای صفحه‌کلید دوباره منتشر می‌شوند.

  • فاکتورهای شکل کامپیوتر مانند مانند بازی‌های Play و ChromeOS به‌طور پیش‌فرض رویدادهای لمسی را به‌جای رویدادهای ماوس ایجاد می‌کنند تا سازگاری با بازی‌هایی را که انتظار ورودی صفحه لمسی دارند، به حداکثر برسانند.

برای بهترین تجربه کاربری، به جای تکیه بر سازگاری خودکار، پشتیبانی مستقیم از ورودی های غیر لمسی را اجرا کنید.

پشتیبانی از تمام عوامل فرم

اندروید بر روی لیست روزافزون دستگاه ها اجرا می شود. چه بازیکنان شما گوشی خود را در تبلتی با صفحه نمایش بزرگ باز کنند، چه تلویزیون دارای Android خود را روشن کنند، چه یک بازی Android را در Chromebook خود باز کنند یا یک بازی سریع را در ماشین خود در زمان انتظار شارژ کردن، اجرا کنند، می‌توانید بازیکنان خود را در کارهای بیشتری درگیر کنید. مکان ها و نمایشگرهای بیشتری نسبت به قبل. شما فقط باید مطمئن شوید که بازی شما در جایی که بازیکنان شما هستند قابل بازی است:

فاکتور فرم ورودی پیش فرض معمولی صفحه لمسی ماوس و کیبورد گیم پد قلم 1 پد D 5 طرفه
تلفن صفحه لمسی بله بله بله بله بله
صفحه نمایش بزرگ صفحه لمسی بله بله بله بله بله
PC 2 ماوس و کیبورد خیر بله بله خیر خیر
ChromeOS 3 پد لمسی، ماوس و صفحه کلید گاهی اوقات بله بله بله بله
تلویزیون پد D 5 طرفه خیر بله بله خیر بله
ماشین 4
(سیستم عامل خودرو)
صفحه لمسی بله بله بله خیر بله
تماشا کنید 5 صفحه لمسی بله خیر خیر خیر خیر

این جدول به شما کمک می کند تا با برجسته کردن ورودی مورد انتظار در هر فاکتور فرم، پشتیبانی از مکانیسم های ورودی جدید را اولویت بندی کنید. به خاطر داشته باشید که باید:

  • از داشتن یک مکانیزم ورودی پیش فرض خودداری کنید. انجام این کار ممکن است به طور ناخواسته دستیابی به تلاش های غیرقابل لمس شما را محدود کند. برای مثال، اگرچه اکثر بازیکنان می‌خواهند بازی‌های ChromeOS را با ماوس و صفحه‌کلید بازی کنند، برخی ممکن است بسته به نمایه دستگاهشان همچنان بخواهند از صفحه لمسی پشتیبانی کنند.
  • از قفل کردن مکانیسم های ورودی برای تشکیل فاکتورها اجتناب کنید. اندروید با طیف گسترده ای از تجهیزات جانبی کار می کند و دستگاه های هیبریدی محبوبیت بیشتری پیدا می کنند. در صورتی که بازیکن تبلتی داشته باشد که با صفحه کلید جداشدنی ارسال شده باشد، حذف پشتیبانی از صفحه کلید از ساخت تلفن شما ممکن است باعث شود بازی شما ناقص باشد.

ورودی ماوس

بزرگ‌ترین و غوطه‌ورترین صفحه نمایش پخش‌کننده ممکن است دارای Android باشد، خواه لپ‌تاپ ChromeOS، تبلت Android یا رایانه شخصی. بازیکنان اغلب انتظار دارند که با ماوس روی این دستگاه ها بازی کنند و افزودن پشتیبانی می تواند تعامل بازیکنان شما را افزایش دهد. اندروید از ویژگی های معمولی رایج در سیستم عامل های دسکتاپ پشتیبانی می کند، از جمله:

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

راهنماهای خاص فاکتور فرم برای موارد زیر وجود دارد:

ورودی تاچ پد

ضبط ورودی تاچ پد در اندروید کمی با پشتیبانی از ماوس متفاوت است. هنگام فراخوانی requestPointerCapture() ، در حال درخواست دسترسی خام به لمس روی پد هستید. این بدان معنی است که شما رویدادها را برای هر لمس به همان روشی که رویدادهای چند لمسی را از صفحه لمسی دریافت می کنید، دریافت می کنید، با این تفاوت که مختصات در فضای مختصات صفحه لمسی بر خلاف فضای نمایشگر قرار دارند. تشخیص حرکت و فیلتر کف دست داخلی اندروید در این حالت غیرفعال است. برای مثال، اگر کاربر یک انگشت خود را روی پد حرکت می‌دهد در حالی که انگشت شست خود را در گوشه پایین سمت چپ قرار داده و آماده کلیک کردن است، این به بازی شما بستگی دارد که تعیین کند کدام حرکت انگشت باید در منطق شما استفاده شود (به عنوان مثال، برای حرکت دوربین).

این بدان معناست که از گیم پدهای مجهز به تاچ پدهای داخلی می توان مانند صفحه نمایش لمسی برای ورودی قوی مبتنی بر ژست استفاده کرد.

برای تعیین اینکه آیا پخش کننده شما از ماوس یا صفحه لمسی در حین گرفتن اشاره گر استفاده می کند، مقادیر منبع را از InputDevice#getSources() یا MotionEvent#getSource() برای InputDevice.SOURCE_TOUCHPAD بررسی کنید.

ورودی صفحه کلید

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

چند روش رایج برای بهبود بازی خود با پشتیبانی از صفحه کلید:

  • مکانیک های چند لمسی باید برای دستگاه های غیر لمسی به صفحه کلید نگاشت شوند. بازی‌هایی که به دو یا چند لمس همزمان نیاز دارند، مانند حرکت و پریدن، از نگاشت این اعمال بر روی فشار صفحه‌کلید برای بهبود قابلیت پخش در صفحه‌نمایش بزرگ و صفحه‌نمایش غیر لمسی بهره می‌برند.
  • منوها را با صفحه کلید قابل پیمایش کنید. افزودن پیمایش دکمه‌ای، مانند کلیدهای جهت‌نما و Enter ، به منوها و عناصر بازی استاتیک، امکان پخش بازی‌ها را در تلویزیون‌ها فراهم می‌کند و دسترسی شما را در همه عوامل شکل بهبود می‌بخشد.
  • کلیدهای میانبر را برای اقدامات روی صفحه اضافه کنید. هر چیزی را که بازیکن می تواند روی صفحه لمس کند را به یک عملکرد صفحه کلید نگاشت کنید. دسترسی سریع به اقداماتی مانند انتخاب واحدها در یک بازی استراتژی یا فعال کردن اسلات موجودی در یک بازی اکشن باعث می شود بازیکنان شما در بازی شما غرق شوند.

به یاد داشته باشید که اگرچه صفحه‌کلیدهای QWERTY نسبتاً متداول هستند، اما طرح‌بندی‌های پرطرفدار متفاوتی وجود دارد و برخی از کاراکترهایی که در یک چیدمان یک کلید فشار می‌دهند، ممکن است آکوردی در طرح‌بندی دیگر باشند.

اگر بازی شما از موقعیت نسبی کلیدها برای انجام اقدامات استفاده می‌کند، مانند استفاده از کلیدهای پیکان W ، A ، S ، و D برای حرکت، از InputDevice.getKeyCodeforKeyLocation() برای ترسیم مکان یک کلید QWERTY به یک کد کلید در KeyEvent.getKeyCode() . اگر طرح پخش کننده تغییر کند، onInputDeviceChanged() فراخوانی می شود.

هنگام افزودن متن به یک بازی، TextInput در GameActivity مکانیزمی را برای کنترل مطمئن ورودی IME، علامت‌های دیاکریتیک یا سایر تغییرات خاص منطقه در طرح ارائه می‌کند در حالی که همچنان از موتور رندر متن درون بازی خود استفاده می‌کنید. این کار از بسیاری از مشکلات مدیریت مستقیم ورودی صفحه کلید یا استفاده از ویجت EditText خارج از صفحه جلوگیری می کند.

ورودی گیم پد

تصویری از یک گیم پد معمولی. دارای یک پد جهت، چهار دکمه چهره با برچسب a، b، x، و y، دو چوب آنالوگ و چهار ماشه است. اعدادی روی تصویر وجود دارد، اما در این صفحه به آنها اشاره نشده است.
شکل 2. ورودی های گیم پد.

گیم‌پدها به طور رسمی در سراسر Android پشتیبانی می‌شوند، از جمله رویدادهای اتصال و قطع، پشتیبانی لمسی ، پشتیبانی پیشرفته ورودی از جمله ژیروسکوپ ، و پشتیبانی خروجی مانند رنگ روشن در صورت وجود.

توسعه‌دهندگان برنامه‌ها می‌توانند به ورودی‌های گیم‌پد از طریق View یا «بازخوانی Activity » گوش دهند، اما توسعه‌دهندگان بازی تشویق می‌شوند از کتابخانه کنترل‌کننده بازی استفاده کنند که:

  • به زبان C++ نوشته شده است تا ادغام با موتور بازی شما را تسهیل کند
  • تمام ویژگی های گیم پد را در یک API متمرکز می کند
  • نمادهای روی دکمه‌های صفحه گیم‌پد ابهام‌زدایی می‌کند، بنابراین برچسب‌های بازی شما می‌توانند با صفحه بازی بازیکن مطابقت داشته باشند.
  • گزارش رویدادهای گیم‌پد را در مواردی که دکمه‌ها در برخی از گیم‌پدها ورودی آنالوگ و در برخی دیگر ورودی‌های باینری هستند یکسان می‌کند.
  • سازگاری محدود رو به جلو را در دستگاه های اندرویدی قدیمی برای گیم پدهای جدیدتر فراهم می کند

ورودی قلم

تصویری که یک برنامه طراحی را نشان می دهد. برس ها باز هستند و اشکالی را نشان می دهند که می توان با قلم طراحی کرد.
شکل 3. برنامه طراحی با پالت براش.

اندروید در اکثر دستگاه‌ها از قلم پیشرفته پشتیبانی می‌کند، از جمله فشار، جهت، شیب، شناور و تشخیص کف دست. رویدادهای قلم به تماس‌های لمسی ارسال می‌شوند تا به سازگاری کمک کنند، اما اگر منطق موتور شما این رویدادها را فیلتر می‌کند، مهم است که با دستگاه قلم آزمایش کنید. یکپارچه‌سازی کامل به بازی‌هایی با اهداف لمسی کوچک یا بازی‌هایی که طراحی آزاد در آنها طبیعی است، سود می‌رساند.

زمانی که رندر از حرکت قلم عقب می افتد، تأخیر آشکارتر از زمانی است که با انگشت مسدود شود یا مانند صفحه کلید، ماوس یا گیم پد از صفحه نمایش جدا شود. به همین دلیل، اندروید یک خط لوله با تأخیر کم برای رندر کردن ضربات با تأخیر کمتر از 4 میلی‌ثانیه از حرکت قلم تا نمایش روی صفحه ارائه می‌کند. سه راه وجود دارد که بازی شما می تواند از این قابلیت استفاده کند و باعث شود بازی شما مستقیماً با دنیای واقعی ارتباط برقرار کند:

  • کتابخانه Jetpack Ink یک جعبه ابزار مناسب برای افزودن رندر استروک پاسخگو به هر پروژه اندرویدی ارائه می دهد.
  • برای بازی‌هایی که نمی‌توانند یا نمی‌خواهند به یک جزء Kotlin برای رندر استروک تکیه کنند، کد منبع کامل C++ در دسترس است. این به توسعه دهندگان اجازه می دهد تا آنچه را که نیاز دارند مستقیماً در فناوری خود ادغام کنند.
  • برای بازی هایی که نیاز به یکپارچه سازی کامل سفارشی دارند، می توان منطق رندر سفارشی را مستقیماً در بافر جلویی اجرا کرد تا هم پاسخگویی و هم کنترل را به حداکثر برسانید.

کنترل کننده های تلویزیون

تصویری از کنترلر تلویزیون اندروید. یک D-pad، دکمه انتخاب، دکمه میکروفون یا دستیار، دکمه بازگشت و دکمه هوم از آن فراخوانی شده است.
شکل 4. کنترل کننده تلویزیون.

دستگاه‌های Android TV دارای یک کنترل از راه دور هستند که شامل یک پد D 5 جهته است که شامل چهار جهت اصلی و یک دکمه تأیید است. برنامه‌هایی که از سیستم ویجت داخلی اندروید استفاده می‌کنند به‌طور پیش‌فرض از آن‌ها پشتیبانی می‌کنند، اما توسعه‌دهندگان باید ویجت‌های سفارشی بازی خود را برای حفظ سازگاری با دستگاه‌های تلویزیون آزمایش کنند.

برای اطلاعات بیشتر به مستندات Android TV مراجعه کنید.

ملاحظات اضافی

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

با در نظر گرفتن این موضوع، توجه داشته باشید که:

  • بررسی وجود نوعی ورودی بهتر از فیلتر کردن بر روی فاکتور فرم است . برای مثال، اگر فقط پشتیبانی از ماوس و صفحه کلید را در ChromeOS فعال کنید، پخش‌کننده‌های رایانه لوحی با صفحه‌کلید جداشدنی از تلاش اضافی شما بهره نخواهند برد.
  • ملاحظاتی خارج از فاکتور شکل وجود دارد که بر بهترین شکل ورودی تأثیر می گذارد . به عنوان مثال، نیازهای دسترسی بازیکن ممکن است استفاده از ماوس یا صفحه لمسی را دشوار یا دردناک کند، اما یک گیم پد یا صفحه کلید ایده آل است.
  • هر حمایتی بهتر از عدم حمایت است . این ایده آل است که به تغییرات ورودی در پرواز پاسخ دهید، اما بازیکنان تا زمانی که قادر به رسیدن به آن هستند، از هیچ حمایتی قدردانی می کنند.
  • بهترین ورودی ممکن است بین اجراهای بازی شما تغییر کند . به عنوان مثال، صفحه نمایش لمسی هنگام انجام یک بازی در حال حرکت، صفحه بازی زمانی که تلفن به تلویزیون وصل است و ماوس و صفحه کلید هنگام نشستن پشت میز ترجیح داده می شود.

نحوه پاسخگویی به ورودی کاربر

بازی‌های موبایل معمولی از یک بازیکن در هر دستگاه پشتیبانی می‌کنند. برای بهترین نتایج، یک بازی به همه ورودی‌های ممکن پاسخ می‌دهد و UI را بر اساس آنچه بازیکن فعالانه استفاده می‌کند تغییر می‌دهد. به این ترتیب، یک نسخه از بازی به طور خودکار در تمام عوامل شکل کار می کند و بازیکنان حتی می توانند ورودی ها را مطابق با نیازهای خود ترکیب و مطابقت دهند.

اغلب توسعه دهندگان می خواهند قبل از تغییر رابط کاربری، یک روش ورودی پیش فرض با تاخیرهای داخلی داشته باشند. این به چه معناست؟

  • از آنجایی که اکثر بازیکنان روی صفحه‌های لمسی بازی می‌کنند، کنترل‌های لمسی را هنگام راه‌اندازی نمایش دهید. اگر بازیکنی شروع به بازی با صفحه کلید یا گیم پد کرد و برای مدتی از صفحه لمسی استفاده نکرد، لایه لمسی را محو کنید.
  • اگر بازیکنی از گیم‌پد استفاده می‌کند و کلید صفحه‌کلید را فشار می‌دهد، نکات درون بازی را تغییر دهید تا به جای دکمه‌های صفحه‌کلید، دکمه‌های صفحه‌کلید نشان داده شوند.
  • وقتی بازیکنی از کیبورد و گیم پد به طور همزمان استفاده می کند، قبل از تغییر رابط کاربری از یک مجموعه راهنمایی به مجموعه دیگر، با تأخیر ایجاد کنید تا از سوسو زدن نمایشگر جلوگیری کنید.
  • هنگام پردازش ورودی ها، نوع منبع ورودی را بررسی کنید. کلیدهای صفحه‌کلید و دکمه‌های گیم‌پد هر دو رویدادهای کلید پایین را منتشر می‌کنند.
  • سعی کنید یک ورودی را به‌عنوان کنترل‌شده علامت‌گذاری نکنید، مگر اینکه بازی شما بتواند آن را مدیریت کند. Android برای تسهیل سازگاری با فاکتورهای فرم جدیدتر، برخی از رویدادها را دوباره منتشر می کند، به عنوان مثال، تبدیل دکمه گیم پد A به دکمه OK .

پشتیبانی ورودی را در مانیفست خود حاشیه نویسی کنید

اگرچه لازم نیست، بهترین کار این است که با پرچم‌های ویژگی مانیفست یادداشت کنید که چه نوع ورودی‌هایی را مدیریت می‌کنید. پرچم های رایج عبارتند از:

  • android.hardware.type.pc : لایه‌های سازگاری ورودی را در ChromeOS و PC غیرفعال کنید تا برنامه‌نویسان بتوانند مستقیماً رویدادهای ماوس را مدیریت کنند. android:required="false" را تنظیم کنید تا بازی همچنان به گوشی ها تحویل داده شود.
  • android.hardware.gamepad : برنامه‌ها و بازی‌ها رویدادهای گیم‌پد را دریافت می‌کنند، چه از گیم‌پد پشتیبانی کنند یا نه. با تعریف این پرچم مانیفست و تنظیم android:required="false" بازی شما به دستگاه‌های Android TV با گیم‌پد متصل شده ارائه می‌شود.

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

  2. اگرچه برخی از رایانه‌های شخصی از صفحه نمایش لمسی و قلم پشتیبانی می‌کنند، سرویس گیرنده Google Play Games فقط به رویدادهای ماوس از سیستم عامل میزبان پاسخ می‌دهد. برای به حداکثر رساندن سازگاری، رویدادهای ماوس به صورت پیش‌فرض به صورت رویدادهای لمسی در کلاینت ظاهر می‌شوند. برای اطلاعات بیشتر به بخش ورودی ماوس مراجعه کنید.

  3. دستگاه‌های ChromeOS معمولاً از ماوس و صفحه‌کلید پشتیبانی می‌کنند، اما صفحه‌نمایش‌های لمسی اختیاری هستند. بسیاری از دستگاه های دارای صفحه نمایش لمسی نیز از ورودی قلم پشتیبانی می کنند.

  4. سیستم عامل Android Automotive به خودروهایی با اندروید داخلی اشاره دارد که می توانند بدون گوشی اندرویدی کار کنند. سیستم عامل خودرو همان چیزی است که این نمودار به آن اشاره دارد. Android Auto برنامه‌ای را از تلفن روی ماشین پخش می‌کند و ممکن است دستگاه‌هایی که از Android Auto (پروجکشن) پشتیبانی می‌کنند صفحه لمسی نداشته باشند.

  5. دستگاه های Wear OS اتصال محدودی دارند. شما می توانید وسایل جانبی بلوتوث را اسکن کنید، اما سیستم عامل اغلب متصل نمی شود.