درود مهمان گرامی! ثبت نام

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
هوش مصنوعی تشخیص دیوار
#1
Mad 
وقت بخیر .
به یک هوش مصونعی نیازمندم که دشمن تشخیص بده وقتی بین خودش و پلیر
دیوار هست تیر نزنه ، و اگه نبود تیر بزنه .
در صورت توان کمک کنید ، با تشکر .
پاسخ
#2
سلام ..از collision_line استفاده کن...

کد:
if (collision_line(x, y, obj_player.x, obj_player.y, obj_wall, false, true) != noone){
//CanShooting = 0;
} else {
//CanShooting = 1;
}

توضیحات بیشتر در مستندات یویو: 
collision_line


.............
موفق باشی

ویرایش : الان ک نگاه کردم دیدم در بخش مقالاته...فقط یه توضیح مختصر بدم ... این تابع دو تا نقطه رو از صفحه مختصات میگیره  و یه خط فرضی بین این دو نقطه رسم میکنه سپس چک میکنه ببینه شی ای ک به عنوان ارگومان سوم بهش پاس دادیم این خط رو قطع می کنه یا نه ..اگ قطع کرد یعنی بین اون دو نقطه است و اگ نکرد یعنی نیست در واقع اگ قطع کرد مقدار id شی رو بر میگردونه و اگ نکرد مقدار no one رو ...خوبی این کار اینه اگ خواستی میتونی مقدار برگشتی رو تو یه متغیر ذخیره کنی و بعد بررسی کنی ببینی شی ای خاص (چون با id سر و کار داره یکتا و خاص میشه) بین اون دو نقطه هست یا نه...
 در دستور بالا چون این کد واسه دشمنه و تو یکی از رویدادهای مربوط به اون می نویسیم پس متغییر های x , y (اینجا x, y محلی هستن)  نقطه شروع خط، موقعیت کنونی دشمن رو نشون میده  بعد به عنوان نقطه دوم، مختصات بازیکن رو بهش می دیم... نکته بعدی اینکه ب احتمال خیلی زیاد باید یه سری شروط دیگه هم بسته به بازیت بنویسی... اگ فقط دشمنت همینجور شلیک می کنه ک دستور شلیک رو بزارتو بدنه if و علامت !=  رو هم == قرار بده... اگ شرطهای دیگه ای هم واسه شلیک داری مثل محاسبه فاصله بین دشمن و بازیکن ک مثلا از یه فاصله خاصی بتونه شلیک کنه یا نکنه در این صورت باید با دستور بالا ادغام کنی...نکته خیلی مهم دیگه اینکه اگر از متغیرمثل  canshooting در جایی استفاده کردی ک مثلا اگ قادر به شلیک باشه هم بتونه فلان کار رو انجام بده در این صورت حتما حتما شرط else رو هم بنویس وگرنه با تغییر در موقعیت دشمن مقدار اون متغییر ثابت می مونه و بازیت دچار اشکال میشه...
پاسخ
 سپاس شده توسط qwerty13 ، MiladKaydi ، TNT




کاربرانِ درحال بازدید از این موضوع: 1 مهمان