بازی های جذاب و هیجان انگیز دارای انفجار ها و دود و گرد و غبار هستند. زمانی که دو جسم با هم برخورد می کنند و یا جسمی محکم به زمین می خورد، اگر بدون افکت و گرد و غبار باشد بازی را ساده و سرد می کند. یک انفجار بزرگ بازی را بسیار جذاب می کند. اما ساخت یک انفجار کار ساده ای نیست! برای طراحی آن باید ساعت ها وقت بگذارید. اما در GameMaker می توانید با سیستم ذرات همه این کار ها را به راحتی انجام دهید.

سیستم ذرات دارای توابع زیادی است. توابعی برای ساخت انتشار دهنده ها، ساخت خود سیستم، و از همه مهم تر متغیر ها و توابع مربوط به ویژگی ذرات. در این جلسه آموزش چگونگی ساخت سیستم، انتشار دهنده و ذرات را به شما آموزش خواهیم داد.

در ابتدا شما باید با مفاهیم سیستم ذرات به خوبی آشنا شوید. برای همین به شما توصیه می کنم قبل از خواندن این مطلب، مطلب زیر را هم مطالعه نمایید.

اولین کار برای ساخت سیستم ذرات، ایجاد یک سیستم است. با ایجاد سیستم می توان انتشار دهنده های خود را هم تولید کرد. سیستم را با تابع زیر می توان ساخت:

part_system_create();

سیستم حتماً باید در متغیری ساخته شود تا بتوانیم از آن استفاده کنیم.

partSystem= part_system_create();

بهتر است متغیر سیستم را در یک متغیر جهانی تعریف کنیم. زیرا از سیستم در هر آبجکتی ممکن است استفاده کنیم. برای آشنایی با متغیر های جهانی مطلب زیر را مطالعه نمایید.

globalvar partSystem;
partSystem= part_system_create();

سیستم را در هر آبجکتی می توان ساخت و یا استفاده کرد، زیرا با متغیر جهانی ساخته شده است.

پس از ساخت سیستم باید انتشار دهنده را بسازیم. با انتشار دهنده ها می توانیم ویژگی ذرات را مشخص کنیم و سپس آنها را در هر جای سیستم به روش مورد علاقه خود انتشار دهیم. انتشار دهنده را با این تابع می توان ساخت:

part_emitter_create(ps);

تابع بالا یک پارامتر دارد، ورودی ps سیستمی است که انتشار دهنده در آن ساخته می شود. ما می خواهیم انتشار دهندۀ در سیستم partSystem ساخته شود. پس انتشار دهنده باید به صورت زیر ساخته شود:

part_emitter_create(partSystem);

انتشار دهنده هم باید در یک متغیر ساخته شود تا هنگام انتشار بتوانیم مشخص کنیم کنیم ذرات باید پخش شوند.

این متغیر هم بهتر است جهانی باشد:

globalvar partSmoke;
partEmitter= part_emitter_create(partSystem);

پس از ساخت انتشار دهنده باید صفات ذرات و نوع ذرۀ هر انتشار دهنده را مشخص کنیم. در ابتدا باید یک ذره بسازیم تا بتوانیم صفات آن را تعیین کنیم. با تابع زیر می توان این کار را انجام داد. برای هر افکتی باید یک ذره جداگانه ساخت تا صفات آنها هم متفاوت باشد.

part_type_create();

هر ذره باید درون یک متغیر باشد تا هنگام تعیین صفات ذرات بتوانم مشخص کنیم کدام صفت مال کدام ذره است:

particleSmoke= part_type_create();

ذرات می توانند تصویر و یا شکل باشند، این یکی از صفات ذرات است. برای تعیین این صفت باید از توابع گروه part_type استفاده کرد. توجه کنید که تمامی صفات با این توابع تعیین می شوند.

برای تعیین این صفت دو تابع وجود دارد. در صورتی که می خواهید از تصویر استفاده کنید، تابع آن اینگونه است:

part_type_sprite(ind, sprite, animation, stretch, random);

تابع بالا 5 پارامتر دارد. پارامتر اول مشخص می کند که این صفت برای کدام ذره است. پارامتر دوم sprite ذره را مشخص می کند، تصویری که برای این ذره ساخته اید را باید در این ورودی وارد کنید. پارامتر سوم و چهارم مربوط به انیمیشن ذره می باشند، پارامتر سوم پویانمایی عکس متحرک را در طول زندگی ذره مشخص می کند (برای جذاب تر شدن ذره باید sprite آن یک عکس متحرک (GIF) باشد) . پارامتر چهارم ارتجاع تصویر را در طول زندگی ذره مشخص می کند. پارامتر پنجم هم مشخص می کند که آیا در هنگام تولید ذره، یکی فریم های تصویر متحرک به طور تصادفی انتخاب شود یا خیر.

برای مثال ما sprite به نام spr_Part_Smoke داریم که می خواهیم به عنوان تصویر انتخاب شود. می خواهیم پویانمایی تصویر در طول زندگی ذره انجام نگیرد و تصویر به طور تصادفی انتخاب شود. تمام این صفات هم برای ذرۀ particleSmoke است.

part_type_sprite(particleSmoke , spr_Part_Smoke, false, false, true);

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

part_type_shape(ind, shape);

تابع بالا 2 پارامتر دارد. پارامتر اول مشخص می کند این صفت مربوط به کدام ذره است و پارامتر دوم نوع شکل را مشخص می نماید.

همان طور که در آموزش سیستم ذرات در GameMaker چیست خواندید، 14 نوع شکل در گیم میکر وجود دارد.

برای استفاده از این اشکال باید از constant های گروه pt_shape استفاده کرد. برای مثال pt_shape_smoke جلوۀ دود است. مثلا می خواهیم ذرۀ particleSmoke از نوع اشکال باشد و صفت مربوط به جلوۀ آن، جلوۀ Smoke (دود) باشد:

part_type_shape(particleSmoke , pt_shape_smoke);

در بعضی موارد استفاده از اشکال خود گیم میکر خیلی بهتر است. برای مثال برای ایجاد جلوه دود یا آتش و یا انفجار بهتر است از اشکال گیم میکر استفاده کنیم. در بعضی موارد هم اینگونه نیست. مثلاً برای ایجاد ذرات خرده شیشه sprite می تواند خیلی مفید باشد.

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

توجه کنید که این کد ها در بازی کار خاصی انجام نمی دهند، زیرا ما هنوز شکل منطقۀ انتشار، اندازۀ منطقه انتشار و نوع انتشار را مشخص نکرده ایم. فقط ذره را ساخته ایم.

توابع و کد های استفاده شده تا حال به صورت زیر است:

globalvar partSystem partEmitter;
partSystem= part_system_create();
partEmitter= part_emitter_create(partSystem);
particleSmoke= part_type_create();
part_type_shape(particleSmoke , pt_shape_smoke);

در جلسات آینده به تعیین صفات بیشتری از ذرات و تعیین منطقه انتشار، و سپس انتشار ذرات می پردازیم.