موتورهای فیزیکی در فلش

شروع موضوع توسط amird ‏6 جولای 2010 در انجمن Action Script 3

  1. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام خدمت تمام دوستان عزیز
    خوب بالاخره بعد از مدت ها اومدم و خوشحالم بگم که برا مطرح کردن یه بحثی اومدم که خیلی کم توی این فروم بهش اشاره شده و بهتر بگم اصلا بهش اشاره نشده اما یکی از بحث هایی هست که واقعا قدرت فلش رو 2 چندان کرده و من شخصا لذت فلش رو با این بحث حس کردم .
    خوب وقدمه بیخودی بسته:green:همینطور که از اسم تاپیک هم معلومه می خوام در مورد موتورهای فیزیکی در فلش صحبت کنم که موتورهای فیزیکی چی هستن ؟ به چه دردی می خورن ؟ چه جوری می شه باهاشون کار کرد ؟ کدوماشون خوبن و از این چیزا دیگه ...
    امیدوارم بتونم با کمک شما دوستان عزیز تاپیک خوبی راه بندازم .
    راستش امروز تازه امتحانام تموم شده و یه مقداری هم کم خوابی برا همین خیلی نمی تونم امروز پستای کامل بدم و فقط خواستم این پست یک شروع باشه .
    برای شروع چندتا سوالی رو که بالا مطرح کردم به صورت خیلی خلاصه جوب می دم . ایشالا به زودی بحث های مفصل و تکمیلی رو اضاف می کنم .
    1-
    موتورهای فیزیکی یا (physics engine) به صورت خیلی ساده مجموعه ای از کلاس ها هستند که شما با استفاده از متدهای این کلاس ها می تونید تمامی حرکت هایی رو که در دنیای واقعی اتفاق می افته رو شبیه سازی کنید این حرکت ها شامل : گرانش زمین ، برخورد اجسام به هر جایی (منظور اینه که برخوردها کاملا طبیعی اتفاق می افته) برای مثال فرض کنیدشما یک توپ رو با زاویه 45 درجه به سمت یک دیوار پرتاب می کنید وقتی شما پرتاب رو انجام می دید انتظار دارید توپ با یک زاویه منطقی به سمتی که شما هدف گرفتید حرکت کنه . اما خوب اگر کمی با کد نویسی فلش آشنا باشید می دونید که این کار حتی برای یک شیء استاتیک هم نسبتا کار سختی هست حالا دیگه وای به حال اینکه اشیاء بخوان داینامیک باشن و تعدادشونم زیاد !!
    ولی موتورهای فیزیک این کار رو برای ما راحت کردن (البته برای یاد گرفتن کار با این موتورها هم باید قید راحتی رو بزنید!) شاید برای اینکه منظورم رو بهتر بگم بد نباشه یه مثال بذارم . این مثال سایت خودم هست که اولین کار آنلاین من با موتور فیزیکی (Box2D) هست . http://darajeh.net (فقط حواستون باشه همچین از cpuتون زیاد کار می کشه ) خوب همونظور که توی سایت هم می بینید اشیا وقتی به هم برخورد می کنن چه جوری تغییر وضعیت می دن .
    2- کاربرد اصلی این موتورها ساخت بازی هست . توی دنیای 2بعدی که با داشتن یکی از این موتورها و تسلط کافی به اونها می تونید بازی ها خیلی جالب و خفنی رو خلق کنید . البته بعضی ها این موتورها رو توی سایت سازی هم استفاده می کنن (یکیش خود من :دی)
    3- چه جوری کار کردن با اینها هم مستلزم اینه که اول با کدنویسی شیئگرا توی فلش خوب آشنا باشید و بعدش هم اولش با آموزش های من یه شروعی داشته باشید بعدش به امید خدا اینترنت ...
    4- موتورهای فیزیک اول برای زبان های قدرتمندی مثل C خلق شدن ولی کم کم این موتورها برای سایر زبان ها هم نوشته شدن که یکی از این زبان ها همین AS3 خودمون هست . چندتا موتور فیزیکی معروف که الان هستن عبارتند از : Box2D (من خودم با این کار می کنم و خیلی هم دوستش دارم و فکر کنم این از همشون هم بهتر باشه عللش رو ایشالا بعدا می گم) ، بعدیش موتور APE هست (فکر کنم این موتور از طرف دانشگاه MIT توسعه داده می شه و در نتیجه حمایت خوبی رو دنبال خودش داره ) ، Fisix Engine در مورد اینم زیاد شنیدم ولی راشت اطلاعات دقیقی ازش ندارم .
    و در نهایت باید بگم به علت اینکه این موتورها با موتورهای 3بعدی ساز مثل PV3D هم می تونن ارتباط برقرار کنن واقعا قدرت خارق العاده ای به فلش می دن که برای ساخت بازی واقعا خارق العاده می شه البته کدنویسیش خارق العاده تره !! (حالا ببینم دیگه کی می تونه فلش رو بذاره جلوی HTML5)
    اینم همون تلفیقی هست که می گم http://www.flashbookmarks.com/demos/soccerballdance/ ولی نمی دونم از کدوم موتورها توش استفاده شده .
    خوب فعلا برای امروز کافی هست .
    از دوستان خواهش می کنم اگر کسی در زمینه کار با این موتورها تجربه داره اینجا مطرح کنه تا هم من و هم بقیه دوستان استفاده کنند .
    موفق و پیروز باشید

    با توجه به گذشت مدت ها از ایجاد این پست و تغییر آدرس سایتم. لطفاً هر جا که آدرس amirdarajeh.com بود توی لینک ها از آدرس darajeh.net استفاده کنید.
     
    آخرین ویرایش: ‏5 فوریه 2013
    نوشته شده توسط amird در ‏6 جولای 2010
    aminzamani68، massoudn، mayapower و 15 نفر دیگر از این ارسال تشکر کرده اند.
  2. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    مرسی امیر جان کارت حرف نداره ...
    ولی فک کنم انجین nvidia physic engine از همشون حرفه ای تره چون توی خیلی از انجین های حرفه ای بازیهای امروزی (بازیهای فوق حرفه ای) از اون استفاده می شه ...
    بای...
     
    نوشته شده توسط ++Hadi++ در ‏7 جولای 2010
    aminzamani68، massoudn، aliflashi و 2 نفر دیگر از این ارسال تشکر کرده اند.
  3. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    راستی یه سمپل هم بود واسه یه شرکت خارجی که شرکت تولید لامپ بود و وقتی لامپ آویزونو درگ می کردی ، مثل کش دراز می شد و وقتی بالا پایین می کردی ، تلو تلو می شد و وقتی ول می کردی ، مثل کش طبیعی بالا می رفت و بعد می یومد پایین و به چپو راست تلو تلو می خورد و بعد متوقف می شد . بدنه کش هم قطعات مستطیل و مووی کلیپ های قطعه قطعه نبودند . یه مووی کلیپ مستطیل که با drawing api ، خم می شد و همه چی عالی بود . اصلا bone و ik و از این چیزا هم نبود . سمپلش تو سایت www.thefwa.com
    بود ...
    اگه کسی بتونه سورس اونو به من بده یه عمر فراموش نمی کنم ...
    بای...
     
    نوشته شده توسط ++Hadi++ در ‏7 جولای 2010
    Haniehh، aliflashi و sdm از این ارسال تشکر کرده اند.
  4. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    لطف داری هادی جان
    nvidia فکر نکنم برای فلش موتور داشته باشه . من توی چیزایی که برای فلش هست گفتم که البته بازم نظر ها و نوع استفاده می تونه توی این حرف اختلاف ایجاد کنه !
    اگر هادی یه تیکه بود می شد با box2d درستش کرد . همین سایت من رو یه نگاه بنداز "I" مربوط به AMIR قبلیت درگ و چپ و راست رفتن رو داره و همون تلو را هم می خوره ولی خوب چند تیکه است که اونم خوب اگر تیکه ها رو کوچیک در نظر بگیری یه خورده کار به اون چیزی که می خوای نزدیک تر می شه . برای کم و زیاد شدن طولش هم می شه یه کاری کرد که متغیر بشه (ولی فعلا چیزی که بتونم 100% بگم درسته تو ذهن ندارم)
    راستی من که سمپلی توی سایت ندیدم یه لینک مستقیت تر نداری ؟؟
    موفق باشی
     
    آخرین ویرایش: ‏8 جولای 2010
    نوشته شده توسط amird در ‏8 جولای 2010
    aliflashi، sdm، DaDaDooDoo و یک نفر دیگر از این ارسال تشکر کرده اند.
  5. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام مجدد به دوستان
    خوب توی قسمت قبل توضیحاتی در مورد موتورهای فیزیک دادم . اما توی این قسمت بحث رو کمی جم و جور می کنم به یکی از این موتورها می پردازم و تمام آموزش ها و مثال ها رو هم بر مبنای همین موتور قرار می دم .
    خوب همونطور که توی قسمت قبل هم گفتم موتوری که از نظر من بهتر هست موتور Box2D هست حالا علتش چی هست ؟
    علت غیر علمی : قبل از اینکه من بخوام کار با موتورهای فیزیک رو شروع کنم یکی از دوستام که توی فلش تجربش از من بیشتر بود به من گفت این
    Box2D از بقیه موتورها بهتره و منم با توجه به شناختی که ازش داشتم قبول کردم .
    علت علمی : 1- این موتور از نظر سرعت اجرا و استفاده بهینه از حافظه خوب عمل می کنه .
    2- این موتور برای سایر زبان های برنامه نویسی مثل :
    JAVA , Java Script , C++ , .NET نیز موجود هست . در نتیجه اگر کسی با یکی از این زبان ها آشنایی داشته باشه خیلی خیلی استفاده از این موتور در اون زبان ها براش راحت می شه . (البته بعد از اینکه با این موتور توی AS کار کنه یا برعکس)
    خوب اینا علل برتری Box2D نسبت به سایر موتورها هستن . اما بد نیست کمی هم در مورد Box2D بدونید . این موتور توسط Erin Catto برای C++ نوشته شده که در حال حاضر برای برخی از زبان ها مثل Action Script نیز موجود هست .
    نکته ای که هست اینه که اگر شما واقعا بخواید سراغ بازی سازی برید باید حتما از یک زبان قدرتمند مثل C++ استفاده کنید . اگر از دلایل فنی کار که C++ چقدر از اکشن اسکریپت قویتر هست چشم پوشی کنیم می رسیم به حاشیه کار که مشکل حمایت از اکشن اسکریپت هست . درسته که Box2D برای اکشن اسکریپت هم موجوده ولی اگر جستجو کنید می فهمید که فروم های خیلی کمی هستند که از Box2D برای فلش حمایت می کنند http://www.box2d.org/forum/ و در ضمن دستورالعمل های اصلی استفاده از این موتورها هم برای C++ موجود هست نه فلش . بنابراین اگر واقعا می خواید بازی سازی رو به عنوان شغل انتخاب کنید فلش گزینه مناسبی نیست !
    خوب بگذریم و بریم سراغ Box2D شما برای اینکه خودتون در مورد این موتور اطلاعات بدست بیارید می تونید توی Google عبارت box2d flash رو جستجو کنید تا به نتایجی برسید اما سایت اصلی مربوط به این موتور در آدرس http://box2dflash.sourceforge.net/ موجود هست . توی این آدرس شما می تونید هم سورس موتور رو دانلود کنید و هم مثال ها رو . برای اطلاعات بیشتر هم دیگه google در خدمت شماست :دی .
    اما برای شروع چه باید کرد ؟
    1- توی اینترنت مقداری جستجو کنید تا با قدرت این موتور و برخی از امکاناتش آشنا بشید (این کار می تونه به علاقه کندی شما در استفاده از این موتور کمک کنه)
    2- سورس موتور رو از آدرس بالا دانلود کنید . من توی آموزش هام از نسخه 2.0.1 استفاده کردم و می شه گفت تا حد زیادی با نسخه های قبلی تفاوت داره . (خوب پس اگر شما هم می خواید کار با Box2D رو شروع کنید همین نسخه رو دانلود کنید)
    3- اگر با مفاهیم برنامه نویسی شیئ گرا آشنایی ندارید (نیاز نیست حرفه ای باشید!) فعلا بیخیال شید . اگر هم آشنا هستید یا علی الان دیگه چیز آماده هست تا از قسمت بعدی آموزش دست به کد بشید .
    فکر کنم برای امروز کافی باشه .
    موفق باشید
    امیر درجه 22.4.89
     
    نوشته شده توسط amird در ‏13 جولای 2010
    wgolzar، ::reza::، mmz2006 و 7 نفر دیگر از این ارسال تشکر کرده اند.
  6. armanbm

    armanbm کاربر VIP

    ارسال‌ها:
    517
    تشکر شده:
    462
    امتیاز دستاورد:
    16
    سلام آقا امیر بسیار ممنون که این آموزش رو شروع کردین. منتظر ادامه ی مطالب هم هستیم.
    یک سوال داشتم ، وقتی تعداد عناصر بالا میره، سرعت پایین میاد و کلا انیمیشن تیکه تیکه از آب در میاد. مثل همین سایت شما اگه کمی شی ها رو زیاد کنیم اینطوری میشه....
    چه راههایی برای بالا بردن سرعت هست؟؟؟
    پیشاپیش از آموزش هاتون ممنون. مشتاقانه منتظرم...

    (آقا هادی منم نتونستم اون فلشی رو که شما میگین پیدا کنم.)
     
    نوشته شده توسط armanbm در ‏19 جولای 2010
  7. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام دوست عزیز
    خواهش می کنم . ایشالا به زودی یکی 2تا مثال رو با آموزش می ذارم .
    والا تا الان چیزی که خودم فهمیدم آره همین بوده که با بالا رفتن تعداد آبجکت ها + حرکت های سریع استفاده از cpu زیاد می شه و نتیجش می شه همین سایت خودم :green: ولی سعی می کنم یه سرچی بزنم و اگر راه حلی داشت حتما بگم .
    موفق باشید
     
    نوشته شده توسط amird در ‏20 جولای 2010
    sdm، ++Hadi++ و armanbm از این ارسال تشکر کرده اند.
  8. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام می کنم به تمام دوستان و علافه مندان فیزیکی
    خوب توی مقاله های قبلی مقدماتی رو در مورد Box2d گفتم حالا توی این مقاله دیگه می خوام کارو شروع کنم و بعد از گفتن یک سری توضیحات در مورد نحوه کار با Box2D شروع به توضیح یک کد ساده کنم . (توضیحاتی رو که در ابتدا می گم بر گرفته شده از توضیحاتی هست که دوستم سجاد سیاه نژاد شیرازی مدتی پیش توی سمینار فلش شیراز اونو ارائه کرد)
    با عرض معذرا از خوانندگان گرامی مجبورم این مقاله رو به صورت pdf قرار بدم . علت هم اینه که این مقاله عکس داره و گذاشتن عکس توی joomla کمی حوصله می خواد که من ندارم .
    موفق باشید
    لینک دانلود مقاله :http://www.amirdarajeh.com/amirUploads/begining%20b2d.pdf
    لینک دانلود فایل های مثال : http://www.amirdarajeh.com/amirUploads/helloWorld.zip
    در ضمن توی سایت خودم هم این مطالب رو به صورت تفکیکی و مرتب شده گذاشتم اگر دوست داشتید از اونجا هم می تونید استفاده کنید .
    http://www.blog.amirdarajeh.com/index.php?option=com_content&view=category&id=9:-box2d&Itemid=2&layout=default
     
    آخرین ویرایش: ‏22 جولای 2010
    نوشته شده توسط amird در ‏22 جولای 2010
    wgolzar، sdm، reza hadipour و 5 نفر دیگر از این ارسال تشکر کرده اند.
  9. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام بچه ها
    راستش یکی از دوستا در مورد موتورهای 3d و ترکیبشون با موتورهای فیزیک ازم پرسید . من از موتور 3بعدی ها سر در نمی یارم ولی توی سرچی که زدم به یه سایتی رسیدم خیلی حال کردم با سمپلاش گفتم شاید به درد شما هم بخوره . http://3dflashlo.wordpress.com/
    یه نگاه بندازید . یعنی واقعا اینا همش با فلشه ؟؟
    موفق باشید
     
    نوشته شده توسط amird در ‏27 جولای 2010
    aliflashi، DaDaDooDoo، farik و یک نفر دیگر از این ارسال تشکر کرده اند.
  10. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام به اونایی که این بحث رو دنبال می کنن و می دنم خیلی هم کم هستند . :rose:
    خوب توی این درس می خوام نحوه قرار دادن گرافیک روی اشیائی که توی قسمت قبل با استفاده از debugDraw خود box2d رسم شدن رو توضیح بدم .
    این درس مثل درس قبلی نیازی به توضیح نداره و فقط با کمی دقت به توضیحاتی که روی کدها نوشتم همه چیز قابل فهم می شه .
    فقط قبل از خوندن کدها باید به 2 تا نکته دقت کنید .
    1- باید قبل از شروع بع کد کردن اشیاء مورد نظرتون رو بسازید و بذارید توی کتابخانه فلش و از اونها برای کار با اکشن اسکریپت هم خروجی بگیرید .
    2- در جهان فیزیکی زمانی که از سمبل ها استفاده می کنید ابعاد کمی دچار تغییر می شوند فرض کنید در این جهان هر 30 پیکسل برابر 1 متر است بنابراین اگر شما شیئی به ابعاد 30 * 30 پیکسل دارید یعنی شیئی به ابعاد 1 متر در 1 متر دارید و این شیء خیلی از ابعاد stage شما فراتر است بنابراین باید محاسباتی را در مقداردهی های خود انجام دهید تا ابعاد درستی را بدتس آورید .

    نکات رو که گفتم اینم از کد :
    PHP:
    import flash.display.Sprite;
    import flash.events.Event;
    // اضاف کردن کلاس های فیزیک
    import Box2D.Dynamics.*;
    import Box2D.Collision.*;
    import Box2D.Collision.Shapes.*;
    import Box2D.Common.Math.*;

    ////////////////////////////////////////////////////////////////////
    //1 - world ساختن شیء
    var m_world:b2World;
    //
    //1-1 - ساختن محدود کننده مختصات
    var worldAABB:b2AABB = new b2AABB();
    worldAABB.lowerBound.Set(-100.0, -100.0);
    worldAABB.upperBound.Set(100.0, 100.0);
    //
    //1-2 - مقدار دهی بردار گرانش
    var gravity:b2Vec2 = new b2Vec2(0.0, 10.0);
    //
    //1-3 - مقدار دهی شی جهان
    m_world = new b2World(worldAABB, gravity, false);
    /////////////////////////////////////////////////////////////////////
    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    /////////////////////////////////////////////////////////////////////
    //از این متغیرها برای ترسیم اشیاء در حالت تست استفاده می شود
    //توی این قسمت چون می خوایم از گرافیک ها استفاده کنیم پس دیگه نیازی به این ها نداریم
    /*var dbgDraw:b2DebugDraw = new b2DebugDraw();
    var dbgSprite:Sprite = new Sprite();
    addChild(dbgSprite);
    dbgDraw.m_sprite = dbgSprite;
    dbgDraw.m_drawScale = 30.0;
    dbgDraw.m_fillAlpha = 0.0;
    dbgDraw.m_lineThickness = 0.0;
    dbgDraw.m_drawFlags = 0xFFFFFFFF;
    m_world.SetDebugDraw(dbgDraw);*/

    //////////////////////////////////////////////////////////////////////        
    //2 - ساختن متغیرهای  بدنه ها و اشکال
    var body:b2Body;
    var bodyDef:b2BodyDef;
    var boxDef:b2PolygonDef;
    var circleDef:b2CircleDef;
    // ساختن بدنه زمین
    bodyDef = new b2BodyDef();
    //ساختن شکل زمین
    bodyDef.position.Set(10, 12);
    boxDef = new b2PolygonDef();
    boxDef.SetAsBox(30, 3);//تنظیم ابعاد 4 ضلعی
    boxDef.friction = 0.3;//تنظیم اصطکاک
    boxDef.density = 0;//تنظیم چگالی
    ////////////////////////////////////////////////////////////////////
    //خوب این کدها مربوط می شن به اضافه کردن سمبل به شی ء زمین
    bodyDef.userData = new PhysGround();//با کتابخانه یه نگاهی بندازید
    //مشخص کردن ابعاد زمین
    //نکته : یادتون باشه زمانی که دارید از موتور فیزیک استفاده می کنید ابعاد با حالت عادی تفاوت دارن
    //بنابراین وقتی یک شی ء توی فلش می کشید و اون رو می ذارید توی کتابخانه انتظار نداشته باشید
    //دقیقا با همون ابعاد کتابخانه توی کار فیزیکی بتونید ازش استفاده کنید
    // زمانی که شما از موتور فیزیکی باکس 2 دی استفاده می کنید و دارید از سمبل استفاده می کنید
    //هر 30 پیکسل شما برابر با 1 متر حاب می شه بنابراین در برخی از مثال ها اگر تقسیم بر 30 یا
    // ضربدر 30 دیدید تعجب نکنید می خوان مقیاس رو تنظیم کنن
    bodyDef.userData.width = 30 * 2 * 30;
    bodyDef.userData.height = 30 * 2 * 3;
    //خوب اینم که دیگه معلومه شیئی که بالا اونو مقدار دهی کردید رو می ذاره توی استیج
    addChild(bodyDef.userData);
    //اضافه کردن اشکال به بدنه
    body = m_world.CreateBody(bodyDef);
    body.CreateShape(boxDef);
    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
    //اگر چگالی عددی بیش از صفر باشد این دستورباعث معلق شدن شیء بدنه خود می شود
    body.SetMassFromShapes();
    //بنابراین در اینجا چون چگالی صفر است این دستور کاری انجام نمی دهد
    //////////////////////////////////////////////////////////////////////
    // اضافه کردن چند شی دیگر
    for (var i:int = 1; i < 4; i++)
    {
        bodyDef = new b2BodyDef();
        bodyDef.position.x = Math.random() * 15 + 5;
        bodyDef.position.y = Math.random() * 5;
        var rX:Number = Math.random() + 0.5;
        var rY:Number = Math.random() + 0.5;
        // تعریف 4 ضلعی ها
        boxDef = new b2PolygonDef();
        boxDef.SetAsBox(rX, rY);
        boxDef.density = 1.0;
        boxDef.friction = 0.5;
        boxDef.restitution = 0.8;//تنظیم حالت ارتجاعی اشیاء
    //////////////////////////////////////////////////////////////////////
    //مثل قبل از این 3 خط هم برای گرافیک دهی استفاده می شه
        bodyDef.userData = new PhysBox();// به کتابخانه یه نگاهی بندازید
        bodyDef.userData.width = rX * 2 * 30;
        bodyDef.userData.height = rY * 2 * 30;
    //////////////////////////////////////////////////////////////////////
        body = m_world.CreateBody(bodyDef);
        body.CreateShape(boxDef);
        // در اینجا چون چگالی برابر 1 است این دستور کاربرد دارد
        body.SetMassFromShapes();
    //مثل بالا از این خط کد هم برای اضافه کردن شی ء ساخته شده به استیج استفاده می شه
    addChild(bodyDef.userData);
    }

    for (var j:int = 1; j < 4; j++)
    {
        bodyDef = new b2BodyDef();
        bodyDef.position.x = Math.random() * 15 + 5;
        bodyDef.position.y = Math.random() * 5;
        // تعریف دایره ها
        circleDef = new b2CircleDef();
        circleDef.radius = rX;
        circleDef.density = 1.0;
        circleDef.friction = 0.5;
        circleDef.restitution = 0.5;
    //////////////////////////////////////////////////////////////////////
    //مثل قبل از این 3 خط هم برای گرافیک دهی استفاده می شه
        bodyDef.userData = new PhysCircle();
        bodyDef.userData.width = rX * 2 * 30;
        bodyDef.userData.height = rX * 2 * 30;
    //////////////////////////////////////////////////////////////////////
        body = m_world.CreateBody(bodyDef);
        body.CreateShape(circleDef);
        body.SetMassFromShapes();
    //مثل بالا از این خط کد هم برای اضافه کردن شی ء ساخته شده به استیج استفاده می شه
    addChild(bodyDef.userData);
    }
    ///////////////////////////////////////////////////////////////
    //@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@2
    //3 - اضافه کردن ایونت برای حلقه بروز رسانی
    this.addEventListener(Event.ENTER_FRAME, Update);

    function Update(evt:Event) {
        //بروز رسانی جهان
        m_world.Step(1/30, 10);

        // بروز رسانی موقععیت و زاویه چرخش اسپریت ها
        for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
            if (bb.m_userData is Sprite) {
                bb.m_userData.x = bb.GetPosition().x * 30;
                bb.m_userData.y = bb.GetPosition().y * 30;
                bb.m_userData.rotation = bb.GetAngle() * (180/Math.PI);
            }
        }
    }
    ////////////////////////////////////////////////////////////////
    خوب کدها رو هم که گفتم اینم از لینک دانلود مثال :
    http://www.amirdarajeh.com/amirUploads/helloWorld (graphic).zip

    موفق باشید
     
    نوشته شده توسط amird در ‏28 جولای 2010
    ghasemMMb، mmz2006، aliflashi و 7 نفر دیگر از این ارسال تشکر کرده اند.
  11. armanbm

    armanbm کاربر VIP

    ارسال‌ها:
    517
    تشکر شده:
    462
    امتیاز دستاورد:
    16
    آقا امیر این پست آخرتون قوقالعاده هست من خیلی باهاش کیف کردم. اون قبلیا همه یه طرف این آخری هم یک طرف.
    خیلی خیلی و ... و خیلی آموزنده هست.
    انقدر دور این موتور های مختلف چرخیده بودم سرم درد گرفته بود . همین باکس تو دی خودمون مثل اینکه از همه تر و سالم تره.!

    خوب بعد از تشکر فراوان از شما من یکی دو چند تا سوال دارم.

    من اومدم یه EventListener برای bodyDef.userData البته دایره ها گذاشتم که مخصوص کلیک هست و کارشون این بود که با کلیک بر روی دایره ها و کشیدن اونا بشه دایره هارو درگ کرد . اما کار نکرد پس یه مقدار بولین ساختم و تو تابع آخرتون Update نوشتم که اگه مقدار بولینم صحیح بود شما بیا آبجکت ها رو آپدیت کن در غیر اینصورت هیچ کاری نکن.
    و تو توابع کلیکم موقع نگه داشتن کلید چپ موس اون مقدار رو برابر نادرست میزاشتم و موقع ول کردن موس برابر درست گذاشتم.

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

    راستی تابع bb.WakeUp(); به چه کاری میاد؟ دقیقش البته اگه ممکنه.

    در آخر هم میخواستم ازتون بپرسم شما در مورد موتور پوش باتن http://pushbuttonengine.com/ اطلاعاتی دارین؟ چند وقتیه درگیرشم خیلی عالیه اما سخته و داخلش برا اساس همین باکس تو دی خودمون هست.

    بازم ممنون از اینکه بدو پشم داشت انقدر باحالید و انقدر مهربون.
    در پناه یگانه ی هستی بخش. نماز روزه هاتونم قبول باشه ایشاله.
     
    نوشته شده توسط armanbm در ‏22 آگوست 2010
    ++Hadi++ از این پست تشکر کرده است.
  12. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام آرمان جان
    خواهش می کنم من هر کاری اینجا انجام می دم به نوعی وظیفه خودم می دونم . چون من یه جورایی به این انجمن مدیونم :)
    در مورد سوال اولت راستش این رو گذاشته بودم که توی آموزش بعدی کامل توضیح بدم ولی فعلا سرم بد جور شلوغه و نمی رسم :sad: ولی فعلا برای اینکه کارت راه بیفته یک سمپل خیلی ساده گذاشتم که می تونی با توجه به اون کارت رو راه بندازی البته توی این سمپل با Event کلیک (CLICK) اشیاء حرکت می کنن ولی خوب به راحتی قابل تغییر هست ایشالا سر وقت آموزشش رو هم می ذارم .
    سوال 2 - نمی دونم والا یه نگاهی به documention خود box2d بنداز . اگر نداری بگو برات آپلودش کنم .
    و اما سوال سوم : این که game engine هست راستش من با تنها game enginی که یه مقداری کار کردم flixel هست که اونم از توی کارگاه تیماتک یاد گرفتم و اطلاعات زیادی در موردشون ندارم .
    ایشالا سرم که خلوت شد آموزشش رو می نویسم حتما
    موفق باشی
     

    پیوست ها:

    • cratetest.zip
      اندازه فایل:
      کیلوبایت 210.3
      نمایش ها:
      98
    آخرین ویرایش: ‏23 آگوست 2010
    نوشته شده توسط amird در ‏23 آگوست 2010
    DaDaDooDoo، ++Hadi++، armanbm و 2 نفر دیگر از این ارسال تشکر کرده اند.
  13. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام خدمت دوستان گل
    خوب آقا آرمان همونطور که قول دادم اومدم برای قسمت جدید آموزش . نمی دونم چرا نتونستم مثل همیشه برای چیزایی که می خوام بگم توضیح خوبی ارائه کنم (نمی دونم مشکل از سواد هست یا مشکل از سختی توضیح دادن روی کد) راستش هر جاشو که خواستم توضیح جزئی بنویسم دیدم فقط می شه ترجمه کدی که نوشته شده پس سعی کردم تا جایی که می شه کلی بگم .
    و نمی دونم خوشبختانه یا متاسفانه به همین علتی که گفتم توضیحات بسیار مختصر شد خواستم توضیحات بیشتر هم بذارم (از طریق ترجمه) ولی حتی توی سایت منبعش هم چیزی نبود :shock:فقط و فقط کد بود (http://www.emanueleferonato.com/2008/11/20/dragging-objects-with-box2d-flash/)
    خوب خلاصه سرتون رو درد نیارم هر چی که به عقلم می رسید در مورد کد به صورت کامنت گذاشتم توی خود کد . امیدوارم گویا باشه .
    مطالعه کنید اگر جائیشو متوجه نشدید بگید اگر در توانم بود حتما جواب می دم .

    لینک دانلود : http://www.darajeh.net/amirUploads/Drag-Drop-Crate.zip

    راستش چون این کد رو خودم ننوشته بودم (البته قبلیاش رو هم خودم ننوشته بودم) ولی به علت پیچدگیش نتونستم اونطوری که دلم می خواد روش توضیح بدم ولی سعی کردم تا جای ممکن بهترین چیزهایی که توی ذهنم می گذره رو بنویسم . (راستش دیگه فکر کنم خودتون می دونید توضیح دادن روی کار کسی چقدر سخته وای به حال اینکه اون کاره کد باشه:-?)

    لینک مستقیم توی بلاگ خودم : http://blog.amirdarajeh.com/index.p...rticle&id=104:box2d-5&catid=9:-box2d&Itemid=2
    موفق باشید
     
    آخرین ویرایش: ‏6 سپتامبر 2010
    نوشته شده توسط amird در ‏5 سپتامبر 2010
    wgolzar، armanbm، DaDaDooDoo و یک نفر دیگر از این ارسال تشکر کرده اند.
  14. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    خوب طبق قولم فایل رو درست کردم و گذاشتم برای دانلود .
    امیدوارم بتونه براتون مفید باشه . هدفم از این پست بیشتر بالا اوردن و خبر رسانی هست .
    و در ضمن اینکه بگم با ارز معذرت به علت کمبود وقت و اینکه می خوام یک کار دیگه شروع کنم که ارتباطی به فلش نداره دیگه فعلنا نمی تونم آموزش بنویسم . امیدوارم بتونم اون کارو زودتر تموم کنم تا باز برگردم سراغ این فلش :wink: البته امیدوارم در این بین کسی باشه که حداقل یک آموزش به این آموزش ها اضاف کنه :rose: این گلم پیشاپیش از طرف من به اون کسی که این کار رو انجام خواهد داد .

    موفق وپیروز باشید
     
    نوشته شده توسط amird در ‏6 سپتامبر 2010
    ::reza::، armanbm و ++Hadi++ از این ارسال تشکر کرده اند.
  15. ++Hadi++

    ++Hadi++ Active Member

    ارسال‌ها:
    3,529
    تشکر شده:
    5,801
    امتیاز دستاورد:
    36
    مرسی امیر جان
    کارهایی که در سایت انجام می دی ، فقط می شه گفت لطف و بخشش و بزرگواری هست نه وظیفه ...
    در کل ممنونم از آموزشهای خوبی که می زاری و ای کاش بچه ها کمی بیشتر قدر کارات رو می دونستند ... در کل خدایی بالای سر ماست و انشاءال... همونطوری که این لطف ها رو واسه بچه ها می کنی ، خدا هم همه چیزهایی رو که دنبالشون هستی از علم و ثروت و خانواده و خوشبختی و کمال و دنیا و آخرت و ...........، بهت عطا کنه . دوست عزیز مطمئن باش ارزشمندی زندگی بزرگانی امثال شما با افرادی که نمی دونن برای چی اومدن و برای چی میرند ، خیلی متفاوت هست از این بابت که اگر انشاءال... پیر بشی و به جوانیت نگاه کنی ، خواهی دید که چه زندگی ارزشمندی رو داشتی و همین کافیه ...
    موفق و مؤید باشی ...
     
    نوشته شده توسط ++Hadi++ در ‏6 سپتامبر 2010
    armanbm، DaDaDooDoo و amird از این ارسال تشکر کرده اند.
  16. armanbm

    armanbm کاربر VIP

    ارسال‌ها:
    517
    تشکر شده:
    462
    امتیاز دستاورد:
    16
    آخ جون سلام!
    عجیبه نمیدونم چرا مرورگرم نشون نداد که این تاپیک پست جدید داره... هی میدیدیم پر رنگ نیست میگفتم چرا اقا امیر آپدیت نمیکنه. نگو مرور گر من مشکل داره. وقتی دیدم آخرین پست مال آقا هادی فهمیدم....

    ممنون آقا امیر دستت طلا همین الان دانلودش میکنم. و سوالم داشتم میپرسم.

    ببخشید اما باید حتما این پست رو میدادم.
    مخلص همه ی شما خانواده ی خوب.
    آرمان.
     
    نوشته شده توسط armanbm در ‏10 سپتامبر 2010
    ++Hadi++ و amird از این پست تشکر کرده اند.
  17. DaDaDooDoo

    DaDaDooDoo کاربر VIP

    ارسال‌ها:
    712
    تشکر شده:
    583
    امتیاز دستاورد:
    16
    امیر خان سلام . دستت درست . بالاخره پروژه هایی که دستم بود رو تحویل دادم و وقتم خالی شد و حالا دارم از این آموزش های شما استفاده می کنم .

    اما همون اول یه چیزی پیش اومد که خوردم تو دیوار ... :razz: من Box2D رو از سایتش دانلود کردم ، اما یکسرس از متد هاش با اینی که شما آموزش دادی فرق داره . من ورژن 2.1 رو گرفتم و مثلاً کلاسی به اسم b2polygonDef نداره و فکر کنم به جاش باید از b2polygonShape استفاده کرد که این کلاس اصلاً متد هایی به نام friction و desteny نداره و اون ها رو توی یک کلاس دیگه به عنوان پارامتر می گیره ... :-? یا مثلاً کلاسsetMassFromShape اصلاً وجود نداره .

    من از Box2D یی که شما تو فایل نمونه گداشته بودید استفاده کردم و مشکل حل شد .

    اما نکته ایی که می خوام بگم این هست که اگر قرار باشه نسخه ها و ورژن ها این قدر با هم متفاوت باشند که کار خیلی سخت می شه ...
    راه حلی یا ایده ای نداری واسه این قضیه ؟
     
    نوشته شده توسط DaDaDooDoo در ‏12 سپتامبر 2010
    ++Hadi++ از این پست تشکر کرده است.
  18. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    والا من خودمم قاطی کردم سر این ورژن های box2d هیچ جاش نمی زنه چه ورژنی هست بعدش آدم دانلود می کنه یادشم که نیست چه ورژنی رو گرفته بعدش قاطی می کنه . والا منم واسه همینه که خود box2d رو همراه آموزش ها می ذارم .
    ببین دوستی به من گفت اگر می خوای بازی سازی فیزیکی حرفه ای کار کنی فلش رو بیخیال (واقعا هم راست می گه چون منابع براش کمه!) ولی خوب حالا اگر می خوای حرفه ای کار کنی برو سراغ C اگرم که نه ورژن box2d در این سطوح خیلی فرقی نمی کنه .

    در ضمن خودمم یادم رفته دارم از چه ورژنی استفاده می کنم ولی اکثر مثال های توی وب روی همین ورژن من می چرخه :wink:
    موفق باشی
     
    نوشته شده توسط amird در ‏12 سپتامبر 2010
    ++Hadi++ و DaDaDooDoo از این پست تشکر کرده اند.
  19. DaDaDooDoo

    DaDaDooDoo کاربر VIP

    ارسال‌ها:
    712
    تشکر شده:
    583
    امتیاز دستاورد:
    16
    امیر خان یه سوال ؟ دیگه فعلاً نمی خوای این تاپیک رو ادامه بدی ؟ من یکسری گیر و گور دارم ( البته بیشتر تئوریک و مفهومی ) ، می خوام ببینم فرصت داری کمک کنی یا فعلاً نه ؟ یه فکر دیگه بکنم واسه حلش ... ؟

    ممنون .
     
    نوشته شده توسط DaDaDooDoo در ‏13 سپتامبر 2010
  20. amird

    amird خبرگان انجمن فلش

    ارسال‌ها:
    679
    تشکر شده:
    1,579
    امتیاز دستاورد:
    16
    سلام
    والا گفتم دیگه نمی رسم اموزش بنویسم .
    سوالت رو مطرح کن اگر در توانم بود حتما جواب رو می نویسم .

    موفق باشی
     
    نوشته شده توسط amird در ‏14 سپتامبر 2010
    DaDaDooDoo از این پست تشکر کرده است.

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