شما می توانید به جای نام هایی که ما اتنخاب کرده ایم نام دیگری انتخاب کنید.

اول از همه ما باید دو sprite گلوله و کاراکتر را آماده کنیم. اگر شما کاراکترتان را از قبل آماده کرده اید، دیگر نیازی به ساختن کاراکتر جدید نیست و فقط گلوله را بسازید. گلوله را می توانید یک دایره بکشید. نام گلوله را spr_buller و کاراکتر را spr_player.

object هر دو را بسازید و نام گلوله را obj_bullet و کاراکتر را obj_player.

به obj_player بروید. در Event یا رویداد create بنویسید:

gun_ready=false;
alarm[0]=15;

اگر می خواهید با action کار کنید:

اگر کاراکتر شما به چپ و راست می رود و برای این کار از دو object استفاده کرده اید ، خط دوم لازم است ولی اگر از یک object استفاده می کنید خط دوم لازم نیست و کد اینگونه تغییر می کند:

gun_ready=true;

کدی که در خط اول است متغیری را تعریف می کند. نامش هرچه می تواند باشد و مقدار آن 'false' است.

خط دوم ما را به رویداد دیگری می برد. رویداد alarm 0. این کد باعث می شود هر گاه object ما ساخته شد، پس از 15 قدم به alarm 0 برود.

حال یک رویداد بسازید. این رویداد برای شلیک گلوله ما است و انتخاب کمی آزاد است. شما می توانید از رویداد های mouse , keyboard release , keyboard press و keyboard استفاده کنید. به نظر من رویداد keyboard Space  مناسب است.

در اینرویداد این کد را بنویسید:

if gun_ready
{
var o;
o=instance_create(x,y,obj_bullet);
with (o) motion_set(0,12);
alarm[0]=20;
gun_ready=false;
}

اگر می خواهید با action انجام دهید:

هر گاه شما در یک شرط (خط اول) متغیر را بنویسید و جلوی آن مقداری ننویسید به معنای این است که جلوی متغیر true را نوشته اید.

این کد ها به ترتیب اینگونه اند:

چک می کند که اگر متغیر 'gun_ready' برابر 'true' بود (شرط گذاشتیم) :

یک متغیر محلی  بسازد به نام o.

obj_bullet را که گلوله ما است را در x,y خودش بسازد و در متغیر محلی (o) ما جا دهد(برابر o کند). بعد برای متغیر o که obj_bullet ما است جهت و سرعتی تعیین کند (صفر جهت (به طرف راست ) و 8 سرعت) و بعد از 20 قدم به 'alarm 0' برود و سپس gun_ready را false کند تا اگر کسی Space را نگه داشت پشت سر هم این کد اجرا نشود (شلیک نکند).

حال رویداد alarm 0 را بسازید و در آن بنویسید:

gun_ready=true;

چگونه شد؟:(توضیح کامل)

کاراکتر ساخته می شود. کاربر Space را می گیرد.game maker چک می کند که آیا gun_ready=true است؟ بله، پس یک گلوله شلیک می کند. بعد gun_ready=false می شود و تا 20 قدم از بازی نگذرد object به alarm 0 نمی رود و gun_ready=true نمی شود و کاربر نمی تواند شلیک کند.

شما می توانید با تغییر مقدار alam زمان آماده شدن را کمتر یا بیشتر کنید.:مثال:

alarm[0]=10;

حال ما باید کاری کنید که obj_bullet مان بعد از زمان کوتاهی پاک شود.برای این کار در obj_bullet دو رویداد alarm0 و create را بسازید.

در create بنویسید:

alarm[0]=30;

و در alarm 0 هم بنویسید:

instance_destroy()

این دو کد باعث میشوند که هر وقت این object ساخته شد پس از 30 قدم پاک شود.

کد هایی را که در رویداد create نوشته شد را یادتان است.(برای دو آبجکتی ها)

gun_ready=false;
alarm[0]=15;

اگر شما برای چپ و راست رفتن از دو object استفاده می کنید، برای object دیگر همین کد ها را برای آن بنویسید ولی در رویداد Space جهت را 180 (چپ) کنید.

اگر شما برای چپ و راست رفتن از دو object استفاده می کنید، و این کد ها را مانند یک آبجکتی ها بنویسید، کاربر می تواند با تغییر object شما پشت سر هم گلوله بزند و این یک ضعف است. مثال:

شما کاری کردید که بازدن کلید راست آبجکتی که راست می رود و با زدن کلید چپ آبجکتی که به چپ می رود ساخته شود. اگر شما مانند یک آبجکتی ها عمل کنید و در رویدا   gun_ready ،create را برابر true کنید. کاربر یک تیر می زند، بعد کلید راست را می زند و دوباره یک تیر می زند، کلید چپ را می زند و دو باره یک تیر و همین طور.......... و نتیجه این می شود:


دریافت
مدت زمان: 10 ثانیه