تبلیغات
پرسه در بازی سازی - حلقه بازی یا game loop چیست؟
شنبه 5 تیر 1395  02:22 ب.ظ
نوع مطلب: (آموزش ،) توسط: دانیال عبدالهی

حلقه بازی یا game loop، قلب تپنده هر بازی است. حال این بازی می تواند یک Pong ساده باشد یا آخرین نسخه call of duty. حلقه بازی را می توان به صورت یک تابع اصلی در نظر گرفت که با آهنگی ثابت، برای مثال 30 بار  در ثانیه در اجرا می شود. وظیفه اصلی حلقه بازی ایجاد تغییرات در وضعیت بازی و بروز رسانی وضعیت و رسم مجدد صحنه بر اساس تغییرات ایجاد شده است. این را می توان به شکل دو تابع update  و  draw  تصور کرد. فرض کنید چنین چیزی داریم( از شبه کد استفاه کرده ام):

GameLoop()
{
update()
draw()
}

فرض کنید یک بازی دارید که در آن کاراکتر را با کلیدهای حرکت می دهید. در این وضعیت تابع update  فشردن شدن کلید را بررسی می کند  و در صورتی که  کلید فشرده شد مو قعیت جدید کاراکتر را محاسبه می کند و تابع draw صحنه یا فریم بعدی را بر اساس موقعیت جدید، رسم می کند. در تابع update مواردی مثل ورودی کاربر، فیزیک، تغییرات متغیرها و... بررسی می شود.
آهنگ اجرای حلقه بازی، همان فریم بر ثانیه یا Fps  را تعیین می کند. یعنی تعداد دفعاتی که حلقه بازی در یک ثانیه اجرا می شود. مفهوم دیگری هم به نام زمان دلتا (delta time) وجود دارد که عکس Fps است و عبارتست از مدت زمانی که یک بار حلقه به طور کامل اجرا می شود. از آن جایی که این زمان ممکن است در دستگاه هایی با سخت افزارهای قوی تر یا ضعیف تر متفاوت باشد، در هنگام ساخت بازی معمولا آن را در محاسبات خود می آورند و این باعث می شود که سرعت اجرا در همه دستگاه ها یکسان باشد.
برای این که نمونه واقعی از حلقه بازی داشته باشیم، فریم ورک xna (یا monogame که خیلی به آن شباهت دارد)  را مثال می زنم. ساختار اصلی یک بازی در xna به شکل زیر است:

main()
{
initialize();
loadContent();
update();
draw();
UnloadContent();
}

تابع initialize یک بار در شروع اجرا می شود و  وظیفه آن مقداردهی های اولیه است. توابع LoadContent   و unloadContent هر کدام یکبار اجرا می شوند و برای لودکردن و  آنلود کردن محتوا مثل تصاویر، تکسچر ها ، صداها و ... به کار می روند. دو تابع update و draw  که پشت سر هم قرار گرفته اند همان حلقه بازی هستند که به طور متناوب اجرا می شوند و در هر فریم،  وضعیت جدید را بررسی و براساس آن فریم بعدی را رسم می کنند.
این مفهوم حلقه بازی به زبان بسیار ساده بود.


نظرات()   
   
reza
جمعه 26 شهریور 1395 12:49 ب.ظ
سلام
احسنت و درود بر شما کمک زیادی به درک من از این مفهیم شد.
 
لبخندناراحتچشمک
نیشخندبغلسوال
قلبخجالتزبان
ماچتعجبعصبانی
عینکشیطانگریه
خندهقهقههخداحافظ
سبزقهرهورا
دستگلتفکر
نظرات پس از تایید نشان داده خواهند شد.
آخرین پست ها

کانال آموزش طراحی بازی..........چهارشنبه 17 آذر 1395

نسخه بتا یونیتی ۵.۵..........پنجشنبه 11 آذر 1395

هیولا دات کام، بستر توزیع بازی های کامپیوتری به صورت آنلاین..........پنجشنبه 27 آبان 1395

ساخت فایل exe از فایل سی شارپ بدون ویژوال استدیو..........چهارشنبه 12 آبان 1395

آموزش مونوگیم - محدود کردن آبجکت به ابعاد صحنه..........یکشنبه 9 آبان 1395

توپ قرمز مسطح یا Flat Red Ball- انجین بازی دوبعدی به زبان سی شارپ..........پنجشنبه 6 آبان 1395

طراحان مطرح دنیای بازی - ریچارد گریوت..........شنبه 1 آبان 1395

طراحان مطرح دنیای بازی - گری گایگکس Gary Gygax..........چهارشنبه 28 مهر 1395

بهبود کیفیت آموزش ها با GifCam..........دوشنبه 26 مهر 1395

طراحان مطرح دنیای بازی - پیتر مولینیو..........جمعه 23 مهر 1395

طراحان مطرح دنیای بازی - ریچارد گارفیلد..........پنجشنبه 22 مهر 1395

طراحان مطرح دنیای بازی - وارن اسپکتور..........چهارشنبه 21 مهر 1395

طراحان مطرح دنیای بازی - سید میر..........سه شنبه 20 مهر 1395

طراحان مطرح دنیای بازی - ویل رایت..........دوشنبه 19 مهر 1395

طراحان مطرح دنیای بازی - شیگرو میاماتو..........یکشنبه 18 مهر 1395

همه پستها