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

دفولد (Defold) جواب «نه» محکمی به این سوال می‌دهد. این موتور که توسط تیم سازنده Candy Crush ساخته شده و حالا در اختیار جامعه متن‌باز است، از اول برای یک چیز طراحی شده: کار کردن. بدون هیاهو، بدون حجم اضافی، بدون اینکه جلوی پای شما سبز شود.

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

بخش نخست: دفولد چطور کار می‌کند و چرا این شکلی ساخته شده؟

برای اینکه یک ابزار را خوب استفاده کنید، اول باید بدانید خالقان آن چه فکری می‌کرده‌اند. دفولد از یک خانواده خاص می‌آید: خانواده موتورهای «بدون دردسر». اما این به معنی ساده بودن یا کم‌قدرت بودن نیست.

سبکی که یک انتخاب است، نه یک محدودیت

واقعیت این است که حجم نهایی بازی ساخته شده با دفولد، بعد از خروجی گرفتن، معمولاً کمتر از ۵ مگابایت است. پنج مگابایت. این عدد برای کسانی که با بازی‌های ۵۰ یا ۱۰۰ مگاباتی موبایل کار کرده‌اند، باورنکردنی به نظر می‌رسد. راز این سبکی کجاست؟

تیم سازنده دفولد تصمیم گرفته از همان اول، فقط چیزهایی را داخل موتور بگذارد که واقعاً نیاز است. این یعنی خبری از کتابخانه‌های عمومی و سنگین که برای هر کاری می‌شود ازشان استفاده کرد، نیست. در عوض، تیم دفولد ابزارهای اختصاصی و بهینه خودشان را نوشته‌اند. برای مثال، وقتی شما در بازی به یک شناسه مثل “player/sprite” ارجاع می‌دهید، دفولد این عبارت متنی را با الگوریتمی به اسم MurmurHash2A به یک عدد ۳۲ بیتی تبدیل می‌کند. مقایسه دو عدد با هم بسیار سریع‌تر از مقایسه دو رشته متنی است. این یک بهینه‌سازی ساده اما هوشمندانه است که در سراسر موتور جاری است.

آن مدل داده که همه چیز را از پیش تعیین می‌کند

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

دفولد از شما می‌خواهد از همان ابتدا مشخص کنید چه منابعی قرار است استفاده شوند. این کار با فایلی به اسم game.project انجام می‌شود که مثل یک نقشه راه است. چرا این کار را کرده‌اند؟ دو دلیل ساده:

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

دوماً، این ساختار شفاف به دفولد اجازه می‌دهد قابلیتی به اسم «به‌روزرسانی زنده» (Live Update) داشته باشد. یعنی شما می‌توانید بعد از انتشار بازی، بخشی از محتوا را بدون نیاز به آپدیت کل بازی از اپ استور، عوض کنید. این یک قابلیت حرفه‌ای است که در خیلی از موتورهای دیگر یا نیست یا خیلی سخت پیاده می‌شود.

حرف زدن با پیام به جای دست گرفتن مستقیم

حالا به جالب‌ترین بخش معماری دفولد می‌رسیم. فرض کنید در بازی، یک دشمن به بازیکن شلیک می‌کند. در بسیاری از موتورها، شما مستقیم تابع TakeDamage را روی بازیکن صدا می‌زنید. یعنی دشمن، بازیکن را می‌شناسد و به آن دسترسی مستقیم دارد.

در دفولد، اینطور نیست. در عوض، دشمن یک پیام با عنوان “damage” به نشانی بازیکن می‌فرستد. خودش نمی‌داند آن سر چه کسی نشسته و چطور قرار است به این پیام واکنش نشان دهد. بازیکن هم در تابع on_message خودش می‌نشیند و منتظر می‌ماند تا کسی برایش پیامی بفرستد.

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

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

از کجا شروع کنیم؟ نقشه راه یادگیری

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

فاز اول: آشنایی با سه مفهوم پایه

دفولد همه چیز را حول سه مفهوم می‌چرخاند:

شیء بازی (Game Object): یک جعبه خالی. خودش هیچ کاری نمی‌کند، نه شکل دارد، نه صدا، نه فیزیک. فقط یک جا در صحنه است.
کامپوننت (Component): چیزهایی که به آن جعبه خالی قابلیت می‌دهند. یک کامپوننت Sprite به آن تصویر می‌دهد. یک کامپوننت Sound به آن صدا می‌دهد. یک کامپوننت Collision Object به آن فیزیک و تشخیص برخورد می‌دهد.
کالکشن (Collection): یک سطح کامل از بازی. مثلاً کالکشن منوی اصلی، کالکشن مرحله اول، کالکشن مرحله دوم. هر کالکشن می‌تواند چندین شیء بازی داشته باشد.

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

فاز دوم: جان دادن با اسکریپت و لوآ (Lua)

اشیاء ساکن، یک بازی نمی‌سازند. برای اینکه بازیکن بتواند حرکت کند، دشمن‌ها به او شلیک کنند و امتیاز بالا برود، نیاز به اسکریپت دارید. دفولد از زبان برنامه نویسی لوآ (Lua) استفاده می‌کند. اگر با لوا کار نکرده‌اید، نگران نباشید. این زبان یکی از ساده‌ترین زبان‌های اسکریپت‌نویسی است و شباهت زیادی به پایتون دارد.

هر اسکریپت در دفولد چند تابع کلیدی دارد:

– `init()`: یک بار، وقتی شیء ساخته می‌شود، اجرا می‌شود. برای تنظیمات اولیه عالی است.
– `update(dt)`: هر فریم (معمولاً ۶۰ بار در ثانیه) اجرا می‌شود. اینجا جایی است که باید حرکت و منطق اصلی بازی را بنویسید.
– `on_message()`: هر وقت کسی به این شیء پیامی بفرستد، این تابع صدا زده می‌شود.

یک نکته حرفه‌ای: در تابع `update`، هرگز چیزهای تکراری مثل `hash(“some_message”)` را ننویسید. این تابع هر بار یک رشته را به عدد تبدیل می‌کند و هزینه دارد. بهتر است این کار را یک بار در بالای فایل انجام دهید و نتیجه را در یک متغیر ذخیره کنید. مثلاً:

local MOVE_MSG = hash(“move_player”)

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

فاز سوم: سر و کله زدن با کامپوننت‌های اصلی

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

اطلس (Atlas): این ابزار کار ساده‌ای دارد. همه تصاویر کوچک بازی را در یک تصویر بزرگ جمع می‌کند. چرا؟ چون GPU وقتی یک تصویر بزرگ را می‌کشد، سریع‌تر از وقتی است که صد تا تصویر کوچک را یکی‌یکی بکشد. قانون سرانگشتی: همه چیزهایی که با هم در یک صحنه دیده می‌شوند را در یک اطلس بگذارید. اندازه اطلس را از ۲۰۴۸ در ۲۰۴۸ پیکسل بیشتر نکنید، مگر اینکه مطمئن باشید دستگاه مقصد می‌تواند تصاویر بزرگتر را مدیریت کند.

فیزیک: دفولد از Box2D برای فیزیک دوبعدی استفاده می‌کند. نسخه جدید (نسخه ۳) که در سال ۲۰۲۵ به دفولد اضافه شده، دقت خیلی بهتری نسبت به نسخه قبل دارد. اگر بازی شما به فیزیک دقیقی نیاز دارد (مثل بازی‌های معمایی یا پلتفرمرهای حساس)، حتماً از همین نسخه جدید استفاده کنید.

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

فاز چهارم: بیلد گرفتن و انتشار

بعد از اینکه بازی تمام شد، باید از آن یک فایل اجرایی بسازید (به این کار در اصطلاح بیلد کردن یا باندل کردن می‌گویند). دفولد این کار را با یک ابزار خط فرمان به اسم `bob` انجام می‌دهد. شاید در ابتدا استفاده از خط فرمان ترسناک به نظر برسد، اما دفولد یک دکمه در ویرایشگر گذاشته که همه کارها را خودکار انجام می‌دهد.

برای انتشار در وب (HTML5)، فقط کافی است گزینه HTML5 را انتخاب کنید. خروجی شما یک پوشه است که می‌توانید روی هر هاستی آپلود کنید. برای موبایل، خروجی اندروید (فایل APK) یا iOS (پروژه ایکس‌کد) را می‌گیرید. حتی برای کنسول‌های بازی مثل نینتندو سوییچ و پلی‌استیشن هم خروجی می‌شود گرفت، اما برای این کار باید مجوز رسمی از شرکت سازنده کنسول داشته باشید.

 

یک پیشرفت مهم: پشتیبانی از Vulkan

از سال ۲۰۲۵، دفولد به طور کامل از Vulkan پشتیبانی می‌کند. ولکان یک رابط برنامه‌نویسی گرافیکی مدرن است که خیلی بهتر از OpenGL قدیمی از پردازنده گرافیکی استفاده می‌کند. اگر بازی شما روی دستگاه‌های جدید اجرا می‌شود، حتماً خروجی را با Vulkan بگیرید. علاوه بر سرعت بیشتر، قابلیت‌های جدیدی مثل اسکینینگ روی GPU (محاسبه انیمیشن اسکلتی توسط GPU به جای CPU) هم در دسترس خواهد بود.


قدم بعدی را بردارید

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

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

حالا نوبت شماست. بروید و دفولد را نصب کنید. یکی از پروژه‌های نمونه را باز کنید. چند عدد را تغییر دهید، یک `print` به کد اضافه کنید، ببینید چه می‌شود. شاید در ابتدا همه چیز عجیب به نظر برسد، اما بعد از یکی دو هفته، متوجه خواهید شد که چرا تیم Candy Crush این ابزار را ساخته و چرا هنوز هم از آن استفاده می‌کند.