مشورت و راهنمایی درباره کالیژن پالیگون
#1
با سلام خدمت دوستان.

یه مشورت از دوستان میخواستم که اگه دقت کرده باشید، زمانی که یک اسپرایت رو توی بازی میارید، چند نقطه در قسمت
collision polygon
دو اون اسپرایت رو میگیره که به صورت اتوماتیک توسط کانستراکت درست میشه. بعد اگه بخوایم میتونیم اون نقاط برخورد رو کم و زیاد یا جابجا کنیم.
کانستراکت بعد از اضافه کردن 8مین نقطه میگه که اینکار باعث کاهش سرعت بازی یا برنامه میشه.

بنده میخوام مثلا اگه پلیرم با کوچکترین برخوردی به قسمت های سیاه رنگ، خونش کم بشه...
برای اسپریت هایی با زاویه های کم خوبه این روش، اما وقتی یک اسپرایت مثل تصویر زیر داشته باشیم، چه راه حلی به نظر دوستان بهینه ترین روشه؟




[تصویر:  pmqh_ax.png]


  پاسخ


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


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


 سپاس شده توسط: mostafanastary ، shazde ، keyhan
#3
تشکر،
این روشی که گفتین خودش یک نظری هست که معمولا خیلی ها همین روش رو میرن. ولی خب، با اینکار، علاوه بر افزایش تعداد اسپرایت ها، درنتیجه تعداد نقاط برخورد هم زیاد میشن.

من میخوام بدونم آیا این روش منطقی تره یا روش تکه کردن و استفاده از چند اسپرایت؟! و البته برای بازی ها روی موبایل، مسلما سرعت مهمه و میخوام ببینم کدوم یکی تاثیر بهتری داره.
  پاسخ


 سپاس شده توسط:
#4
درست است این روش تعداد نقاط را افزایش میدهد . هر چه قالب شکل برخورد به مربع و مستطیل نزدیک شود سرعت کشف برخورد بالا می رود . و هر چه شکل و تعداد نقاط زیاد می شود بشدت افت فریم دارید. یعنی اشیای پیچیده خیلی سنگین تر از چند شی ساده است

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

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

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

1- تعداد اشیای صحنه را ضبدر اندازه شی کن هر کدام کمتر بود برای آن فعال کن
2- اشیای زنده اشیای که حرکت می کنند برخورد روی می دهد پس برای اشیای فعال رویداد را فعال کن
3-برای اشیای گرافیکی بی ارزش که در لایه های دیگر هستند وتاثیری ندارند رویداد برخورد را غیر فعال کن(مثال سیستم ذرات دود یا پس زمینه)
  پاسخ


 سپاس شده توسط: mostafanastary ، shazde ، keyhan
#5
تشکر بابت توضیحات.
من توی انجمن سیرا هم این موضوع رو پرسیدم و یکی میگه همین مدل

[تصویر:  wksj_screenshot_1.jpg]


رو بزاری خوبه.
یکی هم میگه نه ، و میگه چند تکه کنم تصویر رو....

موندم سر این قضیه، برخورد توی این بازی برام خیلی مهمه.
  پاسخ


 سپاس شده توسط:
#6
می توانید برای یک مرحله تست کنی یک دفع مرحله را با روش اول و یک بار با روش دوم دیباگ کنید سپس در قسمت کارایی performance نگاه کن و با هم مقایسه کن مخصوصا fps / est.cpu کن و همین طور تیک برخورد collision check هر چه عدد کوچکتر کارایی بیشتر.
  پاسخ


 سپاس شده توسط: mostafanastary ، keyhan
#7
سلام
تو بازی فیزیکدار تعداد اشیا بیشتر از نقاط پرفرمنسو پایین میاره حتی اشیای کوچک هم تقریبا به اندازه آبجکتهای بزرگ تاثیر میزارند.
  پاسخ


 سپاس شده توسط:
#8
الان قراره اگر پلیر به نقاط بر خورد کم به طور مثال خونش کم بشه؟؟
  پاسخ


 سپاس شده توسط:
#9
برخورد جز فیزیک قرار نمی گیرد اما در بازی های که شما از رفتار فیزیک بکار می برید . کلا عکس و نقاط برخورد تاثیر ندارد چون مستقل است .
این رفتار سنگین است چون از معدلات و انتگرال گیری و مشتقات و فورمول ها بهر می گیرند. که زمان بر هستند. پس هر چه تعداد بیشتر پردازش سنگینی از سی پی یو می کشند همچین حافظه رم بیشتری اشغال می کند.

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

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


 سپاس شده توسط: mostafanastary ، keyhan


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  حل شده ارور جاوا M.gh 4 1,867 1403/6/27، 10:19 عصر
آخرین ارسال: Klkj
  این چیه alirezagamemaker 4 2,327 1403/6/27، 10:18 عصر
آخرین ارسال: Klkj
  نشان دادن حرف در بازی کلماتی mehdi 0 287 1403/5/13، 05:27 عصر
آخرین ارسال: mehdi
  حل شده مشکل در آرایه mehdi 2 557 1403/4/26، 11:41 عصر
آخرین ارسال: mehdi
  حل شده خرید درون برنامه مایکت در وب ویو Arianm 3 1,296 1402/4/25، 12:01 عصر
آخرین ارسال: Arianm

پرش به انجمن: