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

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

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

در جلسه قبل آموزش (قسمت 1) ساخت سیستم، انتشار دهنده، ذره، و تعیین یک صفت ذره را یاد گرفتید. این صفت مشخص می کرد ذره shape یا sprite بود. کد های جلسۀ قبل به صورت زیر می باشد:

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

حال باید صفات دیگری از ذره را مشخص کنیم.

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

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

part_type_life(ind, life_min, life_max);

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

پارامتر های دوم و سوم نیز مقدار طول زندگی ذره را مشخص می کنند. در پارامتر دوم باید کمترین طور زندگی ذره، و در پارامتر سوم بیشترین طول زندگی ذره را مشخص کرد. game maker به صورت random یک مقدار بین life_min و life_max مشخص می کند که طول زندگی ذره شما است.

در گیم میکر هر 30 step برابر با یک ثانیه است. این دو پارامتر هم بر حسب step می باشند، یعنی اگر life_min را 30 step و life_max را 60 step مشخص کنیم، طول زندگی ذره عددی بین 1 و 2 ثانیه است.

برای مثال می خواهیم طول زندگی ذرۀ particleSmoke را تعیین کنیم. می خواهیم طول زندگی بین 1.5 تا 3 ثانیه باشد.

part_type_life(particleSmoke, 45, 90);

مثلا اگر بخواهیم جلوه دود ایحاد کنیم بهتر است طول زندگی ذره را بین 40 و 50 قرار دهیم.

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

در ورودی های یک تابع می توان 3 مقدار شفافیت، در دیگری 2 مقدار، و در تابع دیگر 1 مقدار می توان مشخص کرد. این سه تابع به صورت alpha3، alpha2 و alpha1 هستند.

مثلاً برای افکت دود بهتر است از alpha3 استفاده می کنیم تا دستمان را باز بگذارد.

کار با این تابع به صورت زیر است:

part_type_alpha3(ind, alpha1, alpha2, alpha3);

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

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

برای مثال ما می خواهیم صفت alpha را برای ذرۀ particleSmoke تعیین کنیم. می خواهیم ابتدا ذره دود کاملا پر رنگ و با شفافیت نسبتاً کامل باشد، سپس آرام آرام شفافیت به نصف، و سپس به صفر برسد.

part_type_alpha3(particleSmoke, 0.9, 0.5, 0);

در مثال بالا شفافیت ذره ابتدا 0.9 است، سپس تا 0.5 کم می شود، و بعد آنقدر کم می شود که دیگر نا پدید شود و یا به عبارتی شفافیت به صفر برسد.

رنگ ها در بازی اثرات بسیاری دارند. اگر رنگ جلوه ها را درست تنظیم کنیم، طوری که کاربر را جذب خود کند، می توانیم بازی خوبی بسازیم. پنجمین صفتی که باید برای ذره تعیین کرد، صفت color است. همان طور که از اسمش معلوم است این صفت مربوط به رنگ ذره می باشد. این صفت هم مانند صفت alpha دارای سه تابع است و ویژگی های هر تابع هم فقط در تعداد رنگ با هم متفاوتند. color2 ,color1 و color3 این توابع می باشند. در تابع اول 1 رنگ، دومی 2 رنگ و سومی 3 رنگ را می توان برای ذره مشخص کرد.

برای مثال در جلوه دود ما به دو رنگ نیاز داریم، پس باید از color2 استفاده کرد.

part_type_color2(ind, color1, color2);

برای جلوه دود ما نیاز به دو رنگ داریم، رنگ black (سیاه) برای دود هایی که به انشتار دهنده نزدیک ترند و تازه ساخته شده اند، و رنگ gray (خاکستری) برای ذره هایی که از انتشار دهنده دور شده اند و زمان تمام شدن زندگی شان است. البته از سه رنگ و یا حتی یک رنگ هم می توان استفاده کرد، برای مثال اگر فقط از رنگ black استفاده کنیم، چون از صفت alpha هم استفاده کرده ایم شفافیت ذره کم می شود و خود به خود به رنگ خاکستری نزدیک می شود.

برای استفاده از رنگ ها در گیم میکر، باید از متغیر های ثابت استفاده کرد. برای مثال c_balck و یا c_gray.

part_type_color2(particleSmoke, c_black, c_gray);

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

البته صفت دیگری هم وجود دارد که می توان با کد رنگ های rgb، رنگی خاص خود را ساخت و برای ذره استفاده کرد.

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

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);

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

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