آموزش ساخت بازی چندنفره: مفاهیم اوّلیّه
|چند بازیکن میتوانند به یک بازی ملحق شوند؟
تعداد بازیکنهایی که میتوانند به بازی ملحق شوند به پهنای باند آپلود هاست بستگی دارد. موتور چندنفره محدودیّتی را تحمیل نمیکند، ولی در عمل با محدودیّت مواجه خواهیم شد.
مشکل اینجاست که هاست اطّلاعاتی را که از n بازیکن دریافت کرده است، میخواهد به هرکدام از دیگر بازیکنها بفرستد. برای مثال اگر هاست بخواهد 16 بایت داده به هر بازیکن ارسال کند، ابتدا باید از هرکدام از بازیکنها 16 بایت داده دریافت شود که اگر تعداد بازیکنها nتا باشد بایت داده دریافت میشود. حالا این دادهها قرار است به همهی بازیکنها (n بار) ارسال شود، در نتیجه عدد قبلی n برابر شده و هاست باید بایت داده ارسال کند. مثلاً:
10 بازیکن = 16×10×10 = 1600 بایت برای هر بروزرسانی
20 بازیکن = 16×20×20 = 6400 بایت برای هر بروزرسانی
30 بازیکن = 16×30×30 = 14400 بایت برای هر بروزرسانی
…
100 بازیکن = 16×100×100 = 160000 بایت برای هر بروزرسانی
اگرچه تعداد بازیکنها معمولی بالا میرود، امّا نیاز به پهنای باند به توان2 برابر افزایش مییابد. یعنی حتّی با داشتن یک سرور خیلی قدرتمندتر یا دادههای کمحجمتری برای هر بازیکن، نمیتوانید تعداد بازیکنها را بیش از حد زیاد کنید.
به طور پیشفرض بهروزرسانیها 30 بار در یک ثانیه ارسال میشوند، پس در مثال قبل با 100 بازیکن، عملاً هاست باید دارای پهنای باندی در حدود 5 مگابایت بر ثانیه (یا 40 مگابیت بر ثانیه) باشد. این مقدار برای یک اینترنت خانگی بسیار زیاد است، امّا برای یک سرور اختصاصی خیر.
گذشته از این، هاست باید بتواند بازی را برای تعداد زیادی بازیکن اجرا کند و وظایفی مثل جبران lag و بررسیهای برخورد را انجام دهد که باعث میشود شدیداً از CPU استفاده شود. درضمن اگر هاست یکی از بازیکنها باشد، بازی باید برایش رندر هم بشود. معمولاً مقدار کلّ کاری که باید CPU انجام دهد با افزایش تعداد بازیکنها به سرعت زیاد میشود، اگرچه حدّاکثر تعداد بازیکنها بسته به نوع بازی و اتّصال اینترنت متفاوت است، ولی تقریباً پیوستن بیش از 100 بازیکن به بازی غیر ممکن است.
تنظیم فرمت بهروزرسانیها
این امکان وجود دارد که نوع دقیق مقادیری را که میخواهید موتور چندنفره آنها را منتقل کند تعیین کنید. استفادهی صحیح از این ویژگی باعث میشود نیاز کمتری به پهنای باند داشته باشیم، بدون اینکه تغییر خاصّی در روند بازی رخ دهد، و حتّی حدّاکثر تعداد بازیکنهایی که به بازی ملحق میشوند را افزایش دهیم.
اگر با بیت (bit)، بایت (byte) و باینری (binary) آشنایی ندارید، میتوانید مقالههای بایت و باینری را در ویکیپدیا مطالعه کنید و یا در این باره در گوگل جستجو کنید. به طور خلاصه، در کامپیوتر تمام اعداد در مبنای 2 (دستگاه باینری) نگهداشته میشوند: در این مبنا هر رقم فقط میتواند 0 و یا 1 باشد. یک بایت 8 بیت است، پس میتواند 28 (256) مقدار مختلف داشته باشد، یا مقداری از 0 تا 255. بایتهای بیشتر میتوانند محدودهی وسیعتری از اعداد را در خود نگه دارند. بعضی از انواع اعداد اعشاری مثل 0.3 حدّاقل 4 بایت را اشغال میکنند.
نوع مقادیری که در کانستراکت 2 میتوانید استفاده کنید به شرح زیر است:
High﴿ double، هشت بایت): یک عدد double-precision floating-point که میتواند اعداد اعشاری را با دقّت زیاد در حدود 15 تا 17 رقم اعشار در خود نگهدارد. ولی به تنهایی برای یک عدد 8 بایت حجم میگیرد، که میتواند استفاده از پهنای باند را بیخودی افزایش دهد. در عمل انتخاب این نوع مقدار بعید است، مگر در مواقعی که واقعاً ضروری باشد.
Normal﴿ float، چهار بایت): یک عدد single-precision floating-point که میتواند اعداد اعشاری را با دقّت حدود 6 تا 9 رقم اعشار را در خود نگه دارد. یعنی بعضی از اعداد به اعدادی با تعداد اعشار کمتر گرد میشوند. با اینحال در عمل استفاده از این نوع مقدار به صرفهتر از double است، چون حجمی نصف double دارد و ارقام اعشاری بعد از رقم ششم معمولاً اهمّیّتی ندارند (مثلاً 0.333333 به اندازهی کافی دقیق هست و واقعاً نیازی به 0.333333333333333 نداریم.)
Low﴿ int16، دو بایت): یک عدد صحیح 16 بیتی که فقط میتواند در محدودهی 32768- تا 32767 قرار داشته باشد.
Very low﴿ uint8، یک بایت): یک عدد حسابی 8 بیتی که فقط میتواند در محدودهی 0 تا 255 قرار داشته باشد.
برای کاهش میزان مصرف پهنای باند، باید تا حدّ امکان کمترین دقّتی را که اثر مهمّی در روند بازی ایجاد نکند انتخاب کنیم. مثلاً برای مختصّات X و Y دقّت نوع low﴿ int16) مناسب است. زیرا معمولاً اندازهی لیوت بیشتر از 3267×3267 نیست، و اعشارِ مختصّات پیکسلها اثری در روند بازی ندارد. این دقّت کاملاً کافی است و نسبت به double چهاربرابر کمتر از پهنای باند استفاده میکند.
دقّت low﴿ int16) و Very low﴿ uint8) برای ورودیهایی که پیرها وارد میکنند و به هاست فرستاده میشود مفید است. با استفاده از اکسپرشنهای setbit، getbit و togglebit در کانستراکت 2 میتوانید بیتهایی جداگانه را در این اعداد قرار دهید. اگر یک بازی از 4 کلید جهتی برای حرکت و از Space برای شلّیک استفاده کند، فقط 5 ورودی وجود دارد، که همهاش میتواند در یک 8 بیت ذخیره شود با این حساب که صفر نشان دهندهی این است که کلید مورد نظر در حال فشار داده شدن نیست و یک نشاندهندهی این است که کلید مورد نظر دارد فشار داده میشود. بعد هاست میتواند به هرکدام از بیتها نگاه کند و ورودی مناسب با آن را شبیهسازی کند. همهی اینها فقط یک بایت حجم میگیرند. اگر شما بیشتر از 8 ورودی دارید میتوانید از یک مقدار int16 استفاده کنید، با اینکار در استفاده از پهنای باند خیلی صرفهجویی میکنید. به طریق مشابه، هاست هم میتواند چندین حالت روشن/خاموش[1] را در قالب یک مقدار به پیرها بفرستد.
[1] منظور چیزهایی در بازی هست که نمیتوانند بیش از دو حالت داشته باشند
ممنون!
در ضمن به نطرم چند تا مشکل هست.
1.چرا نمیشه حتی آواتارو آپلود کرد؟ این دسترسی هم بدید چون آواتار که حجمی نداره!
2. رو هاست رایگان زدید سایت رو؟
3.آموزش ها رو میخواهم ویدیو تهیه کنم با کیفیت بالا میشه ایمیلتونو میدید تا براتون بفرستم؟
4.امیدوارم شما هم آموزش هاتونو ادامه بدید در ضمینه ایونت ها.
بدرود
سلام
1. به جاش گالری آواتار هست و درضمن میتونید آواتارتون رو یه جا دیگه آپلود کنید، بعد لینکش رو بدین. به خاطر همین فکر نمیکنم مشکلی باشه. میترسم بعدا که حجم کاربرا زیاد بشه این آواتارها دردسرساز بشن.
2. خیر. هاست سایت رایگان نیست.
3. ایمیل: [email protected]
4. انشاءالله
سلام
خیلی سایتتون خوب هست
چگونه میشه یک بازی ساده تحت وب در هاست ابلود کرد و اجرا کرد و طوری که قابلیت ثبت نام وجود داشته باشد برای کاربران و هر کاربر هر رکوردی میزنه ثبت بشه و در صفحه ای به صورت عمومی رکوردای کاربران معلوم بشه ؟
اگه امکانش هست کامل توضیح بدید و یا ویدیو اموزشی قرار بدید مطمئنم سوال خیلی هست
تشکر
علیک سلام
نظر لطفتونه
برای ثبت نام که خودتون میتونید یک اسکریپتی نصب کنید که قابلیت ثبت نام داشته باشه یا بعد از رکورد زدن اسم بازیکن رو ازش بپرسید، برای ثبت برترین امتیازها به صورت آنلاین هم تا چند روز دیگه یک آموزش تو سایت قرار میدم.
با سلام این مطلب یا مطالب نوشتاریتان را در قالب PDF هم بگزارید خیلی خوب میشه
با تشکر
سلام.
این آموزش که در قالب PDF هست، بیشتر آموزشهای متنی سایت هم همین طور.
فقط به خاطر بهبود سئوی سایت، نسخهی متنی آموزشها رو هم میذارم.
البته بعضی از آموزشها به خاطر کوتاه بودن PDF نشدند.
لینک دانلود این آموزش هم همین الآن دقیقاً زیر عکس کاور آموزش هست:
http://si2.ir/download/376/
خیلی عالی بود ، ممنون
ممنون از مطالبتون
عالی بود خیلی کمکم کرد
میخواستم اگه میشه ویدیو ها رو هم به صورت متن در سایت بگذارید
و بعضی از عکس رو نمیشه دید(فیزیک در کنستراکت ۲: مفاهیم اوّلیّه) اگه درست کنید ممنون میشم
خسته نباشید
علیک سلام
به خاطر این که وقت زیادی میطلبه امکانش نیست.
خیلی ممنون
مقله خوبی بود
ولی تو این مقاله نگفتید چگونه این کار ها را انجام دهیم
مثل چگونه بازی بسازیم که دو نفر با مسابقه بدهند
سلام
اون مربوط میشه به قسمتهای سوم و چهارم آموزش ساخت بازی چندنفره.، که انشاءالله سرم خلوت بشه شاید ادامه پیدا کنه.
آموزش ساخت چتروم رو هم میتونید ببینید (قسمت دوم آموزش ساخت بازی چندنفره).
با عرض سلام وخسته نباشید فراوان از زحمات شما
اموزشهاتون خیلی عالین
اگه میشه راجب کارکتر های gif هم توضیح بدین برای طراحی حرکت دادان ادم یا حیوانات
سلام من اموزش چت رومو دیدم اما چطوری یه بازی بسازم که دو نفر با هم بازی کنند و همدیگرو ببینند
سلام
اگه آموزش رو دیدهباشید گفتیم هنوز دو قسمت دیگه از آموزشهای چندنفره باقی مونده، که در اونجا به این مسائل هم میرسیم انشاءالله.
سلام.اول تشکر میکنم از اموزشای خوبتون.فقط قسمت دوم و سوم ویدیو هستند.میخواستم خواهش کنم اگه میشه این بخش اول رو هم به صورت ویدیو قرار بدین البته اگه میشه
علیک سلام. این PDF به اندازهی کافی کامل هست، ولی نسخهی ویدئویی این آموزش هم وجود داره.
برای تهیّهی نسخهی ویدئویی این قسمت روی لینک زیر کلیک کنید و فقط جلسهی یازدهم اون رو به مبلغ ۱۰۰۰ تومن بخرید.
http://construct2.ir/showthread.php?tid=609
آثا چقدر مسخره شد.
فقط صد نفر برای عضویت تو بازی؟
سلام
بستگی به سبک بازیتون و نوع اتصال بازیکنها داره.
مثلا پیرتوپیر باشه یا دارای سرور مرکزی باشه فرق میکنه.
یا حتّی سبک بازی هم تأثیر داره، مثلا اگه نیازی به آنلاین بودن همزمان همهی کاربران در یک زمان خاص و بازی کردنشون با هم نیست و اتصال برپایهی سرور مرکزیه تا چندهزارنفر هم شاید بتونن وصل بشن و بازی کنن (مثل بازیهایی شبیه کلش)
ما در این آموزش فرض رو بر این گرفتیم که اتصال پیرتوپیره و همه باید همزمان آنلاین باشن و با هم بازی کنند که در این حالت هم شاید به زور ۲۰ تا بازیکن بتونن آنلاین بازی کنند.
سلام داداش گلم ممنون بابت اموزش هاتون من یک بازی ماشینی 2d کامل ساختم می خوام انلاینش کنم مثل کلش طوری ک هک نشه و سود این زحمت هایی ک کشیدمو بده باید چی کار کنم راستی میشه ایدی تلگرامتو بدی تا بتونم مستقیا با هاتون در ارتبات باشم
علیک سلام
فعلاً همین سه قسمت آموزشو ابتدا ببینید: مفاهیم، چتروم، پنگ
خیر
البته بازیی ک ساختم برای اندروید
داداش چرا تعداد اوینت ها محدود من بخش مرحل بازی حرکت کاراکتر منو لوگو و… ساختم و دیگه نمی زاره چیزی ب بازیم اضافه کنم الان می خوام واس پرداخت درون برنامه ای یه بازیم اوینت بزارم اما ارور میده و یه ادرس وب میده ک فکر کنم باید یچیزی رو بخرم سایتشم کلا انگلیسی باید چی کار کنم
حتماً طبق دستوراتی که در صفحهی دانلود سایت برای کرک کردن برنامه نوشتیم عمل نکردید.
داداش تو قسمت دانلود نو شته فایلc2license این فایل دقیقا کجاست
داخل فایل زیپ که از سایت دانلود میکنید هست.
سلام ببخشید جای بی ربط کامنت میذارم
من از فاروم محروم شدم . فکر کنم اشتباه شده .اخه هر چی فکرشو میکنم دلیلش رو پیدا نمیکنم .. فقط یه موضوع ارسال کردم که تو اون سوال پرسیدم …
سلام، بله، این مشکل برای خیلی از کاربران دیگهمون پیش اومده و خودش درست شده. هنوز نمیدونم مشکل از کجاست، چون محروم نیستید. شما هم با سیستمهای دیگه وارد بشید و… شاید درست شد.
با احترام
سلام و درود خدمت اقای قاسم زاده عزیز
بنده تازه کارم و چند تا سوال سوال داشتم خدمتتون
1 : موتور کانستراکت 2 یک موتور بازی سازی مثل یونیتیه ؟
2 : یونیتی آموزشش دشوار تره یا کانستراک 2
3 :به نظرتون برای ساخت بازی انلاین 2 بعدی کودوم یک از اینها بهتره
4 : آموزش های بازی سازی در وبسایت شما از کد نویسی سی شارب هم استفاده شده ؟ و یا اگر نه از چه کد نویسی استفاده شده
تشکر از وبسایت بسیار خوب و مفیدتون
خدا قوت
علیک سلام
۱. بله، ولی فقط بازی دوبعدی میسازه.
۲. کانستراکت سادهتر هست
۳. اگر تحت وب هست کانستراکت بهتره وگرنه یونیتی
۴. خیر، فقط در آخرین دورهای که برگزار کردیم از جاوااسکریپت هم استفاده کردیم (در آموزشها و دورههای قبلی بدون برنامهنویسی با کانستراکت کار میکردیم)
سلامم
ممنون از وقتی که میذارید و برای هموطناتون مطالب مفید قرار میدید تا اونا هم پیشرفت کنن
من فقط یه سوال دارم
این آموزش(ایجاد بازی آنلاین)فقط در کانسترکت جواب میده یا یونیتی رو هم شامل میشه؟
یعنی برای ساخت بازی در یونیتی همین مراحل رو بریم کافیه یا باید کارای دیگه ای انجام بدیم؟
یا حق
علیک سلام
راهنمای اصلی سایت یونیتی رو که دیدم از لحاظ مفاهیم پایه خیلی شبیه کانستراکت بود. پس این قسمت (و فقط همین قسمت) از سری آموزشهای ساخت بازی چندنفره ی ما میتونه برای یونیتی هم مفید باشه، ولی برای پیاده سازی و کلاسها و تابعهایی که وجود داره باید ببینید مستندات خود یونیتی چی میگه.
سلام داداش اموزش ها درست هست اما هم اموزش شما و هم اموزش سایت سیرا مشکل داره چون وقتی بازی انلاین با همین اموزش شما میسازیم یا سورس های کانستراکت که تست میکنی تو کامپیوتر مشکل نداره چون اطلاعات از یک کامپیوتر که یک میلی مترم دور نیست فرستاده میشه اما اگه با یکی که یک شهر از شما فاصله داری امتحان کنی مشکل در میاد مشکل اینه مثلا اسپرایت من در مختصات30 است اما در اون میشه10 یا هرچی اطلاعات رد بدل با خیلی سرعت کم رد و بدل میشه و همان سورس که در کامپیوتر تست میکنی و یک میلی متر دور نیست میتوان باگ های در ان دید و چه برسه به یک کیلومتر فاصله
ممنون از اموزش ها با تشکر
دو پست مفید مربوط به این موصوع.
انواع معماری ساخت بازی آنلاین از نظر شبکه https://goo.gl/yHdVuG
چگونه سرور بازی آنلاین بنویسیم
https://goo.gl/wDb7gD