آموزش حرکت آبجکت بدون استفاده از رفتار
#1
Lightbulb 
 سلام دوستان
وقتتون به خیر
می خواستم بهتون یاد بدم که چگونه بدون استفاده از رفتار های Movements چون
8Direction و Bullet آبجکت هاتون رو تغییر مکان بدید.

خب بریم سراغ پیش نیاز ها:
1-کانستراکت بلد بودن ( یه کم )
2-قهر نبودن با ریاضیات ( به مقدار لازم )
3-وجود خودتون برای یادگیری ( ضروری )

ابتدا آبجکتون رو توی صفحه لیوت ایجاد کنید ( هیچ رفتار حرکتی هم نمی خوایم )
 من اسمش رو فرضا گذاشتم sprite
حالا وارد ایونت شیت بشید

از شیئ سیستم این ایونت رو بدید : Every X seconds

تو فیلد خالی هم فعلا 0.05  ( ثانیه )  رو وارد کنید. ( این در واقع سرعت حرکت آبجکته ( دلخواه ))

میمونه اکشن این ایونت

خب حالا add action رو بزنید و شیئتون رو انتخاب کنید.

حالا اکشن set position رو انتخاب کنید.

یک پنجره دارای دو فیلد خالی x و Y باز میشه

خب تو این قسمت باید یه خورده ریاضیتونو با بازی سازی پیوند بزنید.
ما سرعت جسم رو تعیین کردیم حالا تو این قسمت در واقع باید بگید
که جسم در چه زاویه ای حرکت کنه اما نه با واحد درجه.
خب اگه خسته نشدید بقیه اش هم بگم
دو تا فیلد داریم که نام x و دارند

خب اگه یادتون باشه من اسم آبجکتم رو گذاشته بودم sprite
پس حالا فیلد ها رو مثل تصویر زیر پر می کنم ( sprite.X و در فیلد بعدی sprite.Y )

[تصویر:  w3dv_capture.png]

خب حالا می مونه بخش جالب کار
زاویه مون رو به دو مولفه ایکس و ایگرگ تجزیه می کنیم
خب حالا ایکس تقسیم بر ایگرگ چی میشه ( شیب زاویه )
ما باید تانژانت زاویمون رو حساب کنیم
حالا اونو به صورت نسبت دو عدد حقیقی بنویسید که عددِ در صورت باید در
فیلد X به همراه علامتش در قبل آن ( در ادامه عباراتی که قبلا نوشتیم ) و
عدد در مخرج باید در فیلد Y به همراهعلامتش در قبل آن پر شود. به همین سادگی

مثل شکل زیر که من گفتم با زاویه 45 درجه حرکت کنه.

[تصویر:  8a13_capture8.png]



فقط یه خورده تانژانت زاویه هایی عجیب غریب مثل 26.5 یا 187.3 درجه
اذیتمون می کنه که بهتره از زاویه های 30 و 45 و 60 کمک بگیرید و
با تست کردن مکرر بازی مولفه های x و Y رو تغییر بدین تا تقریبا به
 زاویه حرکت دلخواه برسین.

نکات :
1- اگه اسم آبجکتتون چیز دیگه ای بود نامش رو به جای sprite در فیلد های بالا بنویسیدش.
2-این روش با هر خروجی جواب میده.
3-می تونید به جای اعداد حقیقی که گفتم از متغییر استفاده کنید تا هر لحظه بتونید آبجکت
رو کنترل کنید.

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




[تصویر:  chavoshi%208456232.jpg]
جان منست او هی مزنیدش
آن منست او هی مبریدش
آب منست او نان منست او
مثل ندارد باغ امیدش
باغ و جنانش آب روانش
سرخی سیبش سبزی بیدش
متصلست او معتدلست او
شمع دلست او پیش کشیدش
                             « مولانا »

  پاسخ


 سپاس شده توسط: danials008 ، general-sherman ، hsnpi ، shazde ، Dani
#2
سلام

میشه بپرسم کارایی این همه شرط و رفتار چیه

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

منظورم یه دلیل که کاربر بدونه این ها در بعضی مواقع بهتر از رفتار های خود کانستراکت هستند

سوء تفاهم نشه . میپرسم چون برام سوال شده بود

تنها چیزی که به ذهنم رسید اگر این رفتار ها و شرط هایی که به اسپرایت نسبت دادیم همراه با رفتار Phisix قابل استفاده باشه و بتونیم بصورت تلفیقی از هر دو استفاده کنیم شاید مشکل بعضی از دوستان در مورد تکان دادن اشیاء که رفتار Phisix دارند در سبک 8 جهت حل بشه و یک روش ابداعی بشه . که باید تست بشه

اگر هم مورد استفاده خاصی داره لطفا اعلام کنید

موفق باشید
[تصویر:  Hurricanes.jpg]
  پاسخ


 سپاس شده توسط: shazde ، keykavoos
#3
ببینید شما ظاهرا با تانژانت و اینجور چیزا آشنایی دارین . دوستانی مثل من که هنوز بلد نیستیم خو چ کنیم؟
این همه اونت و اونت بازی دیگه چیه .
یه رفتار میدی حله دیگه!
  • در حال طراحی چند برنامه و بازی جدید!
  پاسخ


 سپاس شده توسط: general-sherman ، keykavoos
#4
دوستان حالا این آموزش که ضرر نداره ! به معلوماتتون اضافه شد ! اصلا فهمیدید خود رفتار ۸جهت بصورت ریاضی چطور ساخته شده ! 
بشخصه برام چند بار اتفاق افتاده که رفتار کانستراکت به صورت تنها جوابگوی نیاز من نبوده و مجبور شدم دستی بسازمشون که کنترل بیشتری داشته باشم و باگ بوجود نیاد.
  پاسخ


 سپاس شده توسط: general-sherman ، shazde ، keykavoos
#5
اول که دستتون درد نکنه. اضافه کنم که استفاده از everythick حرکت رو رونتر میکنه ولی سرعتی که ما میبینیم وابسته به فریم میشه. بهترین راه استفاده از دلتا تایم هست.

برای محاسبه زاویه هم از atan(y/x) میتونید استفاده کنید که خود کانستراکت تو دستوراتش داره.

برای اکثریت دوستان همون استفاده از رفتار های خود کانستراکت کفایت میکنه.ولی در بعضی شرایط خاص این روش قدیمی set position روش خوبی هست. من خودم مجبورم توی بازیم از همین روش استفاده کنم.

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

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

یک توصیه هم دارم به همه. اگر ریاضیاتتون خوب نیست به عنوان گیم دیزاینر موفق خیلی امیدی نداشته باشید. مگر کسی کمکتون کنه یا خدا بهتون شانس بده.
  پاسخ


 سپاس شده توسط: general-sherman ، keykavoos
#6
(1396/5/4، 09:53 صبح)Dr.AR نوشته است: اول که دستتون درد نکنه. اضافه کنم که استفاده از everythick حرکت رو رونتر میکنه ولی سرعتی که ما میبینیم وابسته به فریم میشه. بهترین راه استفاده از دلتا تایم هست.

برای محاسبه زاویه هم از atan(y/x) میتونید استفاده کنید که خود کانستراکت تو دستوراتش داره.

برای اکثریت دوستان همون استفاده از رفتار های خود کانستراکت کفایت میکنه.ولی در بعضی شرایط خاص این روش قدیمی set position روش خوبی هست. من خودم مجبورم توی بازیم از همین روش استفاده کنم.

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

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

یک توصیه هم دارم به همه. اگر ریاضیاتتون خوب نیست به عنوان گیم دیزاینر موفق خیلی امیدی نداشته باشید. مگر کسی کمکتون کنه یا خدا بهتون شانس بده.

سلام دوست عزیز

ممنون از توضیحات جامع شما

میشه کمی در مورد مختصات مرجع و مختصات متحرک توضیح بدید و یک مثال ملموس بزنید تا بهتر متوجه بشیم . 

اگر منظورتان جسم ثابت و جسم مدور است که فرمان دهی به این نوع اجسام از طریق جسم میانجی و Phisix امکان پذیر است و اگر منظورتان چیز دیگریست لطفا بیشتر توضیح دهید تا ما هم از اطلاعات شما بی بهره نمانیم
ممنون میشم

موفق باشید
[تصویر:  Hurricanes.jpg]
  پاسخ


 سپاس شده توسط: keykavoos
#7
بله فرض کنید چندتا سیاره دارید. مختصات مرجع(گلوبال تو یونیتی) همونی هست که خود کانستراکت داره. بالا گوشه رو گرفته 0و0 و به سمت پایین y زیاد میشه (مثبت) و سمت راست هم X . حالا فرض کن من یک دستگاه مختصات به یکی از سیاره ها وصل کنم جوری که با حرکت و دورانش 0و0 نسبت به مختصات اصلی تغییر کنه و جهت بردار ها عوض بشه.



حالا اگه من بخوام معادله حرکتی برای یک سیاره داشته باشم که به دور یک سیاره دیگه میچرخه و اون هم خودش دور یک سیاره دیگه. تو مختصات اصلی ... بوووم! مغزم پوکید ... ولی میتونم حرکت دایره ای بدم نسبت به مختصات محلی بعد اون رو با مختصات یک حرکت بدم حول اون یکی و به سادگی کار ها انجام میشه.

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

بهترین مثالش حرکت ماه دور زمین و زمین به دور خورشید هست. که البته برای این مثال خاص بعضی رفتار های خود کانسراکت کار رو راه می اندازند.مثل rotate و pin . من بعنوان مثال برای مختصات ها  و ساده عرض کردم.

یشتر این مشکل کانستراکت وقتی هست که نمیشه به اونها معادله حرکت (رابطه بین x و y اسپرایت تو هر لحظه یا فریم ) که تنها روشی که من بلدم همین روشی هست استاد در بالا فرمودند. کلا خود رفتارهای کانسراکت هم بر مبنای همین set posion درست شدند ولی بازه هم تو حرکات پیچیده سخته. من که کم کم جمع میکنم برم یونیتی.
  پاسخ


 سپاس شده توسط: general-sherman ، keykavoos
#8
(1396/5/4، 10:48 صبح)Dr.AR نوشته است: بله فرض کنید چندتا سیاره دارید. مختصات مرجع(گلوبال تو یونیتی) همونی هست که خود کانستراکت داره. بالا گوشه رو گرفته 0و0 و به سمت پایین y زیاد میشه (مثبت) و سمت راست هم X . حالا فرض کن من یک دستگاه مختصات به یکی از سیاره ها وصل کنم جوری که با حرکت و دورانش 0و0 نسبت به مختصات اصلی تغییر کنه و جهت بردار ها عوض بشه.



حالا اگه من بخوام معادله حرکتی برای یک سیاره داشته باشم که به دور یک سیاره دیگه میچرخه و اون هم خودش دور یک سیاره دیگه. تو مختصات اصلی ... بوووم! مغزم پوکید ... ولی میتونم حرکت دایره ای بدم نسبت به مختصات محلی بعد اون رو با مختصات یک حرکت بدم حول اون یکی و به سادگی کار ها انجام میشه.

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

بهترین مثالش حرکت ماه دور زمین و زمین به دور خورشید هست. که البته برای این مثال خاص بعضی رفتار های خود کانسراکت کار رو راه می اندازند.مثل rotate و pin . من بعنوان مثال برای مختصات ها ساده عرض کردم.


ممنون از توضیحتون اما به نظرم هر  چه دستورات ساده تر و سر راست تر باشن Performance بازی بالاتر و شیرینی گیم سازی بیشتر و گیم پلی مطلوب تری ارائه میکنند . همانطور که سایت Scirra هم اعلام کرده رفتار های موجود کانستراکت کاملا بهینه شده ان تا کمترین خواسته و بالاترین بازده رو داشته باشن . اما بازم چرخش یک جسم مدور ب دور یک جسم مدور دیگر که ان هم به دور جسم مدوری دیگر بچرخد که ان هم به دور جسم مدور دیگری بچرخد و بی نهایت به دور اجسام مدور بچرخند تااااا .. لب تاپ بترکد . توسط اجسام میانجی کاملا عملی است
اما فرمایش شما هم کاملا متین است و این هم روشی است

ممنون از جوابتون
[تصویر:  Hurricanes.jpg]
  پاسخ


 سپاس شده توسط: keykavoos
#9
بله آی گفتی شما ! من اشتباه کردم از همون اول بخاطر تنبلی اومدم سراغ کانستراکت. کانستراکت برای گوشی و وب عالیه. الان هم که کلی از بازیم رو ساختم دچار مشکل شدم پروژه متوفق شد رفتم سراغ یکی دیگه اونم بخاطر مولتی پلیر گیر کرد. الانم دوتا کار دیگه رو شروع کردم. از همون اول باید میرفتم سراغ یونیتی.

ولی از بحث اصلی این تاپیک خارج نشیم. بازی دیگه ای که الان روش کار میکنم این روش واقعا کمک میکنه. چون مثلا رفتار platform تا جایی که من میدونم به اسپرایت نسبت به solid اصطکاک میده . و مجبور شدم از این روش استفاده کنم. البته custom movment یا physic هم بد نیستند. ولی بازم اونها بنا به دلایلی بکارم نمیاد.

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


 سپاس شده توسط: keykavoos
#10
(1396/5/4، 11:14 صبح)Dr.AR نوشته است: بله آی گفتی شما ! من اشتباه کردم از همون اول بخاطر تنبلی اومدم سراغ کانستراکت. کانستراکت برای گوشی و وب عالیه. الان هم که کلی از بازیم رو ساختم دچار مشکل شدم پروژه متوفق شد رفتم سراغ یکی دیگه اونم بخاطر مولتی پلیر گیر کرد. الانم دوتا کار دیگه رو شروع کردم. از همون اول باید میرفتم سراغ یونیتی.

ولی از بحث اصلی این تاپیک خارج نشیم. بازی دیگه ای که الان روش کار میکنم این روش واقعا کمک میکنه. چون مثلا رفتار platform تا جایی که من میدونم به اسپرایت نسبت به solid اصطکاک میده . و مجبور شدم از این روش استفاده کنم. البته custom movment یا physic هم بد نیستند. ولی بازم اونها بنا به دلایلی بکارم نمیاد.

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

بله خیلی ممنون از توضیحات شما و استاد گرانقدر
پیروز و سربلند باشید
[تصویر:  Hurricanes.jpg]
  پاسخ


 سپاس شده توسط: Dr.AR ، keykavoos


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 127 82,182 1402/8/24، 09:00 عصر
آخرین ارسال: mehdiosw
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 19,756 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,423 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 7,868 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100
  رفع مشکل خروجی فونگپ (: M.gh 11 7,955 1400/4/10، 02:17 صبح
آخرین ارسال: oak

پرش به انجمن: