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

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

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

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

globalvar partSystem partEmitter;
partSystem= part_system_create();
partEmirrerSmoke= part_emitter_create(partSystem);
particleSmoke= part_type_create();
part_type_shape(particleSmoke , pt_shape_smoke);
part_type_life(particleSmoke, 45, 90);
part_type_alpha3(particleSmoke, 0.9, 0.5, 0);
part_type_color2(particleSmoke, c_black, c_gray);

حال به تعیین صفات بیشتری می پردازیم.

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

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

part_type_speed(ind, speed_min, speed_max, speed_incr, speed_wiggle);

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

برای مثال اگر بخواهیم برای ذره particleSmoke که یک ذره دود است این صفت را تنظیم کنیم، بهتر است سرعت ذره را بین 4.5 و 8.5 قرار دهیم و در هر قدم 0.35 از سرعت آن بکاهیم.

part_type_speed(particleSmoke, 5.5, 9.5, -0.35, 0.5);

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

برای اینکه بخوهیم ذره ای را منتشر کنیم، باید جهت انتشار را هم مشخص کنیم. برای اینکار باید از صفت direction استفاده کرد. این صفت مشخص می کند که ذرات در هنگام انتشار در چه جهاتی بتوانند حرکت کنند. کار با این تابع اینگونه است:

part_type_direction(ind, dir_min, dir_max, dir_incr, dir_wiggle);

ورودی اول مربوط به نام ذره است. ورودی دوم و سوم به ترتیب مربوط به کمترین زاویه محدوده انتشار و بیشترین زاویه محدوده انتشار هستند. 0 سمت راست و 180 جهت چپ را مشخص می کند. برای مثال:

صفت Direction در ذرات

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

برای مثال اگر بخواهیم برای ذره particleSmoke این صفت را تنظیم کنیم، می توانیم به صورت زیر عمل کنیم تا ذره ای طبیعی داشته باشیم:

part_type_direction(particleSmoke, 0, 180, 0.5, 20);

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

part_type_gravity(ind, grav_amount, grav_dir);

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

برای مثال اگر بخواهیم برای ذره particleSmoke این صفت را با جهت گرانش 90 (بالا) و میزان 0.2 تعیین کنیم، باید به صورت زیر عمل کنیم:

part_type_gravity(particleSmoke, 0.2, 90);

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

globalvar partSystem partEmitter;
partSystem= part_system_create();
partEmitter= part_emitter_create(partSystem);
particleSmoke= part_type_create();
part_type_shape(particleSmoke , pt_shape_smoke);
part_type_life(particleSmoke, 45, 90);
part_type_alpha3(particleSmoke, 0.9, 0.5, 0);
part_type_color2(particleSmoke, c_black, c_gray);
part_type_speed(particleSmoke, 5.5, 9.5, -0.35 , 0.5);
part_type_direction(particleSmoke, 0, 180, 0.5, 20);
part_type_gravity(particleSmoke, 0.2, 90);

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

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