آموزش ساخت بازی چندنفره: مفاهیم اوّلیّه

جبران Lag

مشکل زیر را در نظر بگیرید: بازی‌کن الف ایستاده است و بازی‌کن ب را هدف قرار داده است. بازی‌کن الف موس را دقیقاً روی بازی‌کن ب می‌برد و شلّیک می‌کند. (فرض کنید که تیر مثل عکس زیر درجا برخورد کند، مثلاً لیزر باشد و یا گلوله‌ای با سرعت بی‌نهایت.) در این حین که دارد خبر این شلّیک به هاست می‌رسد (فرض کنید 100 میلی‌ثانیه طول بکشد)، بازی‌کن ب به سمت راست حرکت می‌کند. وقتی خبر شلّیک بعد از 100 میلی‌ثانیه به هاست می‌رسد، هاست بررسی می‌کند که آیا برخوردی صورت گرفته‌است یا نه، امّا برخوردی را تشخیص نمی‌دهد، چون بازی‌کن ب دیگر در آن مکان قرار ندارد! بازی‌کن الف می‌بیند که گلوله‌اش به بازی‌کن ب برخورد کرده است، ولی بازی‌کن ب هیچ صدمه‌ای نمی‌بیند.

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

به عقب بردن زمان

هاست می‌داند که چه قدر طول می‌کشد تا هر بازی‌کن بازی را ببیند، زیرا مقدار Latency برای تک تک آن‌ها محاسبه می‌شود. بنابراین وقتی به هاست پیغام می‌رسد که بازی‌کن الف شلّیک کرده است، هاست می‌داند که این شلّیک 100 میلی‌ثانیه قبل اتّفاق افتاده است.

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

پیش‌بینی ورودی محلّی

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

سؤالات فنی خود را فقط در انجمن بپرسید. در غیر این صورت پاسخ داده نخواهد شد.
۳۳ نظر

افزودن دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق برای مرجع تخصصی کانستراکت محفوظ است.