بررسی فیزیک در یه بازی فلش (سطح متوسط)

شروع موضوع توسط mshgames ‏15 سپتامبر 2008 در انجمن برنامه فلش Flash

  1. mshgames

    mshgames Well-Known Member

    ارسال‌ها:
    699
    تشکر شده:
    801
    امتیاز دستاورد:
    93
    به نام خدا


    سلام



    بررسی فیزیک سرعت در فلش و در بازیها (سطح مبتدی) ----- قسمت اول



    خوب برایه شروع ابتدا نرم افزار فلش رو بازی کرده و یه سند خالی ایجاد کرده
    حال یه شکل توسط ابزار Tool سمت چپ پنجره فلش رسم کنید حالا هر شکلی (دایره مستطیل بیضی و.......)حال توسط ماوس کل شکل را انتخاب و دکمه Ctrl+F8 کیبرد را زده تا پنجرهای همانند شکل باز شود
    در قسمت دکمه های رادیویی گزینه Movie clip را برگزینید.
    در قسمت Name هر اسمی دلتون میخواد بزارید مثلا "SpaceShip"

    [​IMG]




    حال رویه Ok کلیک کرده حال مووی کلیپ خود را انتخاب و در نوار پایین قسمت Properties و در قسمت یا کادر Instance Name بنویسید mc خوب این سفینه مایه حال قسمت برنامه نویسیش مونده


    [​IMG]


    حال فریمه اول را انتخاب کرده و کد زیر را درش کپی کنید

    PHP:

    var speedx=0;
    var speedxx=0;
    var speedy=0;
    var speedyy=0;
    onEnterFrame=function(){
        mc._x+=speedx;
        mc._x-=speedxx;
        mc._y-=speedy;
        mc._y+=speedyy;
        if(Key.isDown(Key.RIGHT)){
            speedx+=0.20;
    }
    else
    speedx-=0.06;
    if(speedx<=0){
        speedx=0;
    }
    if(Key.isDown(Key.LEFT)){
        speedxx+=0.20;
    }else
    speedxx-=0.06;
    if(speedxx<=0){
        speedxx=0;
        mc._rotation=0;
    }
    if(Key.isDown(Key.UP)){
        speedy+=0.20;
    }else
    speedy-=0.06;
    if(speedy<=0){
        speedy=0;
    }
    if(Key.isDown(Key.DOWN)){
        speedyy+=0.20;
    }else
    speedyy-=0.06;
    if(speedyy<=0){
        speedyy=0;
    }
    if(mc.hitTest(UW)){
        speedyy+=4;
        speedy=0;
    }
    if(mc.hitTest(DW)){
        speedy+=4;
        speedyy=0;
    }
    if(mc.hitTest(LW)){
        speedx+=4;
        speedxx=0;
    }
    if(mc.hitTest(RW)){
        speedxx+=4;
        speedx=0;
    }
    };
     
    توضیح کد: ابتدا ما مقدار اون جعبه متن یا متغیر را برابر صفر قرار داده و 4 متغیر محلی با نام های speedx , speedxx , speedy , speedy ایجاد کرده که مقدار اولیشان صفر میباشد.




    حال توسط اونت enterFrame را برابر یه تابع قرار داده که این تابع را هر زمان یا همون هر فریمی که وارد میشه enterFrame انجام بده:


    حالا تابع مورد نظر چیکار میکنه؟؟؟؟


    اون شکله ما که اسمش mc در جهت x و y (بالا پایین چپ راست بر حسب مقادیر 4 متغییر اول حرکت میکنه که در حالت عادی اون 4 متغییر 0 در نتیجه مووی کلیپ ما ثابته)
    هنگامی که کلید RIGHT و یا همون راست پیکان نما فشرده شد(شی Key) متغییر speedx رو در هر لحظه به اندازه +0.20 افزایش بده و هنگامی که کلید زده نشده (else) متغییر چیکار کن به مقدار -0.06 کمش کن و زمانی که متغییر speedx کوچکتر یا برابر 0 شد اونوقت مقدارشو برابر 0 قرار بده تا متوقف بشه

    برایه بقیه جهتا همینه بالا چپ پایین



    حال به تابع hitTest میرسیم


    قبل از اون

    ابتدا 4 تا خط دور استیج یا همون صفحه کاری مون رسم کنید و هر کدومشونو تبدیل به یه نمونه مووی کلیپ کنید(انتخابشان کرده و دکمه Ctrl+F8 را زده) بدین شکل:





    [​IMG]





    حال بالایی را انتخاب و (مووی کلیپ یا همون خط بالا را که تبدیل به مووی کردید را انتخاب و در نوار پایین قسمت Properties و در قسمت Instance Name نامشو بدید UW یعنی دیوار بالا و برایه پایینی نامشو بدید DW و برای سمت چپی نامش برابر با LWو برایه آخری یا همون راست RW


    حال بقیه کد

    میگیم زمانی که این مووی ما (سفینه) برخورد کنه به یکی از این دیوارا مقدار اون متغیر 0 و متغیر معکوس پر بشه


    مثال مثلا اگه به دیوار بالا برخورد کرد چون کاربر همچنان دکمه بالا کیبرد رو فشرده مقدار متغییر speedy برابر 0 بشه یعنی دیگه بالا نتونه بره و مقدار متغییر جهت پایین که speedy برابر با مثلا 4 بشه تا بیاد شکلمون پایین حالت برخورد ساده داشته باشه برایه بقیه هم همینطور



    حال دکمه Ctrl+ENTER را زده و نتیجه را مشاهده نمایید



    اینم فایله Fla



    موفق باشید محمد
     

    پیوست ها:

    • Physic.rar
      اندازه فایل:
      کیلوبایت 7.9
      نمایش ها:
      14
    نوشته شده توسط mshgames در ‏15 سپتامبر 2008
    <3pehr> و amir_s از این پست تشکر کرده اند.
  2. mshgames

    mshgames Well-Known Member

    ارسال‌ها:
    699
    تشکر شده:
    801
    امتیاز دستاورد:
    93
    دوستان نظری چیزی نبود


    راستی امیر جان اینو اگه امکان داره به قسمت مباحث آموزشی منتقل کن من اشتباه کردم اینجا تاپیک زدم

    ممنون

    موفق باشی
     
    نوشته شده توسط mshgames در ‏17 سپتامبر 2008

به اشتراک بگذارید