اموزش بازی سازی مولتی پلیر گام به گام: قسمت 400 نظر

اموزش بازی سازی مولتی پلیر گام به گام: قسمت 4

در این قسمت از اموزش درباره مشکلات همگام سازی صحبت خواهیم کرد، در مثال قبل ما اعداد و ارقام را با دقت محاسبه کردیم تا همه چیز به خوبی کار کند بیایید کمی سناریو را تغییر دهیم در نظر بگیرید که ما 250 ms لگ(lag) در انتقال بین سرور و کلاینت داریم و حرکت از یک خانه به خانه دیگر 100 ms طول میکشد همچنین در نظر بگیرید که پلیر کلید راست را دوباره پشت سر هم فشرده است تا 2 خانه به سمت راست حرکت کند با توجه به تکنیکی که تا به الان به کار بسته ایم چیزی که اتفاق می افتد شبیه شکل زیر است :

 

در اینجا ما یک مشکل باحال (!) در لگ 250 ms داریم. وقتی وضعیت جدید بازی به کلاینت میرسد وضعیت پیش بینی شده توسط کلاینت موقعیت 12 x است اما سرور می گوید موقعیت 11 است به خاطر این که سرور ما معتبرتر است بنابراین کلاینت باید به موقعیت x=11  بازگردد اما در همین حین سرور درخواست دوم از فشرده شدن کلید را در 350ms دریافت می کند که می گوید موقعیت پلیر x=12 است بنابراین کاراکتر باید دوباره به موقعیت جلو پرش کند

از دیدگاه پلیر، او دو بار کلید حرکت به سمت راست را فشرده است کاراکتر دو خانه به راست حرکت کرده است و برای 50 ms در انجا ایستاده بود تا اینکه یک خانه به سمت چپ پرش کرد و بعد 100 ms ایستادن در انجا دوباره یک خانه به سمت راست پرید!!! البته این مشکل غیر قابل قبول است و باید حل شود

کلید حل این مشکل در این است که درک کنیم که پلیر زمان حال را در بازی میبیند اما به خاطر تاخیر در انتقال داده ها (lag) به روز رسانی بازی و گرفتن اخرین وضعیت از سرور بازی را به گذشته بازمیگرداند (در واقع وضعیت بازی در کلاینت همیشه از وضعیت بازی در سرور عقب تر است) بنابراین سرور اخرین وضعیت بازی را از ورودی ها محاسبه میکند در حالی که هنوز همه فرمان های کلاینت را دریافت نکرده است

حل چنین مشکلی کار سختی نیست ( شایدم هست:D )، برای حل چنین مشکلی ابتدا کلاینت باید به هر درخواستی که به سرور ارسال میکند یک شماره اختصاص بدهد در مثال ما چنین خواهد بود : کلید راست#1  و برای بار دوم کلید راست#2 و هنگامی که سرور به ان پاسخ می دهد پاسخ ها دارای شماره هایی هستند که اخرین ورودی پلیر در ان مشخص است

حالا در 250ms   سرور می گوید "براساس چیزی که از درخواست #1 دیده ام موقعیت شما در x=11 است" به خاطر این که سرور ما ملاک است موقعیت کاراکتر در x=11 قرار میگیرد حالا فرض کنید کلاینت یک کپی از فرمان هایی که به سرور ارسال کرده است را دارد که براساس اخرین وضعیتی که از سرور ارسال شده است میداند که درخواست #1 پردازش شده است بنابراین میتواند ان کپی را دور بیندازد اما میداند که سرور همچنان باید نتیجه درخواست #2 را ارسال کند بنابراین ابتدا پیش بینی که خود محاسبه کرده است (در سمت کلاینت) اعمال میکند به این صورت کلاینت براساس اخرین وضعیتی که از سرور دریافت کرده است در زمان "حال" باقی خواهد ماند به اضافه این که هنوز سایر درخواست های کلاینت پردازش نشده اند

بنابراین این تا اینجا پلیر در 250 ms جواب درخواست #1 خود را میگیرد که در ان نوشته شده موقعیت شما x=11 است سپس نسخه ای که درخواست #1 دارد را پاک میکند اما کپی از درخواست #2 را نگه میدارد زیرا هنوز هیچ پاسخی از سرور در مورد ان درخواست ارسال نشده است (کلاینت به صورت داخلی نتایج سرور را نگهداری میکند و ورودی کلاینت را اعمال میکند) در ادامه وضعیت جدید از درخواست #2 دریافت می شود که در ان گفته شده موقعیت شما x=12 است بنابراین کلاینت وقتی بررسی میکند پیش بینی ورودی کاربر با اخرین وضعیت از درخواست ها همسان است اخرین نسخه از درخواست را نیز پاک میکند به این صورت هیچ ورودی برای پردازش نمانده است



نسخه PDF این مطلب را دانلود کنید





حق نشر مطالب اوکسو :

 

 

قابل توجه علاقه مندان و کپی کنندگان گرامی ، تمامی مطالب این وب سایت تحت مجوز خالق

(Creative Commons)  می باشد و اجازه کپی کردن ، استفاده تجاری مطالب بدون اجازه

صاحب اثر مجاز نمی باشد و طبق مجوز اثر پیگرد قانونی به همراه خواهد داشت.

مجوز کریتیو کامنز
این کار مجوز دارد تحت مجوز کریتیو کامنز نسبت‌دادن-غیرتجاری-بدون انشقاق ۴٫۰ بین‌المللی.

این مطلب پایان یافت و امیدواریم به نتیجه دلخواهتان رسیده باشید . اگر به نتیجه

دلخواهتان هنوز دست نیافته اید , میتوانید برای رفع مشکل به تالار گفتمان اوکسوف

مراجعه کنید و سوال خود را مطرح کنید.

 

تالار گفتمان اوکسوف

 

 

همچنین میتوانید ما را در شبکه های اجتماعی نیز دنبال کنید و از جدید ترین اخبار ما با خبر شوید :

 

 

3491498_823


نظر شما

مطالب مرتبط

اموزش بازی سازی مولتی پلیر گام به گام: قسمت 7

اموزش بازی سازی مولتی پلیر گام به گام: قسمت 700 نظر

ناوبری کور

تصور کنید در حال ساخت یک بازی ریسینگ با خودرو هستید . یک خودرو ....


(لطفا به ادامه مطلب مراجعه فرمایید)
ادامه مطلب

گیم کانسپت : پیدا کردن ایده بازی 2

گیم کانسپت : پیدا کردن ایده بازی 200 نظر

ایده بازی از سایر رسانه ها :

کتاب ها ، فیلم ها ، تلویزیون و سایر ....


(لطفا به ادامه مطلب مراجعه فرمایید)
ادامه مطلب