حل شده حرکت دشمن به سمت پلیر
#11
Question 
(1394/9/22، 07:40 عصر)wowxpria نوشته است:
(1394/9/22، 04:36 عصر)arminfk نوشته است: on start layot >> monster >>set angel
و حالا مشخصات 
player x 
player y

دوست عزیز این هیچ ربطی به حرکت دشمن به سمت پلیر نداره بلکه مختصات یا زاویه یک شئ را مشخص می کنه (و برای بازی هایی که در چهار جهت حرکت دارد استفاده می شود نه بازی پلتفرمی) شما برای اینکه دشمن حرکت کنه ابتدا بهش رفتار پلتفرم (platform) میدین سپس کنترول اون را در قسمت پنجره ویژگی ها به NO تغییر میدین تا کنترول اون دست شما نباشه:
کد:
Defult controls = no

سپس می تونید از رویداد های (actions) داخل اسپریت دشمن که بهش رفتار پلتفرم دادین , از گزینه های set vector X و set vector Y  استفاده کنید که برای جرکت دشمن باید در محور X باشد و به سمت پلیر:

کد:
Every tick >>> Enamy.set vector X = player.x

الان در اونت بالا پلیر شما هر سمت (محور X) حرکت کند اسپریت دشمن هم به آن سمت حرکت می کند ولی قصد ما این است که دشمن به سمت ما حرکت کند پس یک - به مختصات پلیر اضافه می کنیم:
کد:
Every tick >>> Enamy.set vector X = -player.x

الان اگر پلیر شما سمت چپ باشد و دشمن سمت راست و بازی را تست کنید میبنید که دشمن به سمت پلیر حرکت می کند ولی وقتی از پلیر رد می شود باید دوباره دنبال پلیر ما بیوفتد ولی چون گفتیم - پس به راه خود ادامه میدهد برای اینکه آن را نیز درست کنیم می توانیم از روش های مختلفی استفاده کنیم.
اینم یک روش ساده:
ابتدا به دشمن خود رفتار پلتفرم داده و کنترول آن را روی No بگذارید سپس یک متغیر از نوع نوشته (text) به اسپریت دشمن اضافه کرده و مقدار آن را  "Right" بگذارید:

[تصویر:  Untitled_2.jpg]
حالا مثل زیر عمل کنید:

[تصویر:  pic.jpg]

اگر مختصات محور X پلیر (Compare X) بزرگتر از مقدار محور X دشمن بود مقدار متغیر دشمن به "left" و اگر کوچکتر بود به "Right"
تغییر کنه.
حالا تو اونت سوم گفتیم اگر مقدار متغیر برابر "left" بود دشمن برعکس ما حرکت کنه در غیر اینصورت (Else) به سمت پلیر ما.

اینم سورس
دمت گرم داداش
  پاسخ


 سپاس شده توسط:
#12
سلام 
این روش یه مشکلی داری اونم اینه که اگه دو تا دشمن باشه یکی از دشمنا نزدیک میاد و دومی با یه فاصله ای میمونه  راه حل این چیه؟
  پاسخ


 سپاس شده توسط:
#13
(1394/9/23، 05:38 عصر)kingprado نوشته است: سلام 
این روش یه مشکلی داری اونم اینه که اگه دو تا دشمن باشه یکی از دشمنا نزدیک میاد و دومی با یه فاصله ای میمونه  راه حل این چیه؟

سلام،

با تشکر از مهدی عزیز، مشکلی که شما بهش اشاره کردید به خاطر مسئله پیک کردن در کانستراکت است. در مواردی که تعداد اینستنس های یک شی بیشتر از یک عدد است نباید از دستور else استفاده کرد برای اینکه else شیئی را پیک نمیکند. شما بجای else باید این ایونت را قرار دهید:
کد:
Compare instance variable >>>Move = "Right"

بعلاوه اگر با استفاده از دستور همپوشانی (overlapping) در هنگام برخورد دشمن به پلیر رفتار پلتفرم اینستنس های دشمن را غیر فعال کنید، به نظر من زیباتر خواهد بود(از لرزش در اسپرایت دشمن هنگام برخورد با پلیر جلوگیری خواهد کرد)

به مانند این سورس
--------------\\\\\\\\\\*******\\\\\\\\---------------------------\\\\\\\\\\**********\\\\\\\---------
[تصویر:  vngames_mobarez.png]


*«يَرْفَعِ اللَّهُ الَّذِينَ آمَنُوا مِنْكُمْ وَ الَّذِينَ أُوتُوا الْعِلْمَ دَرَجاتٍ//خداوند کسانی را که ایمان آورده اند و کسانی را که دانش به آنان عطا شده است.درجات عظیمی می بخشد.»(قرآن کریم، المجادلة، 11 ‏)*

*پیامبر اکرم (ص) فرمود:«علم آموزي بر هر مرد و زن مسلمان، واجب است.»(مصباح‏ الشريعة، ج 13)
  پاسخ


 سپاس شده توسط: wowxpria ، kingprado ، Game Baker


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
Information پرداخت درون برنامه مایکت کوردوا ya mahdi 0 230 1404/1/17، 05:43 عصر
آخرین ارسال: ya mahdi
  نحوه خروجی اندروید کوردوا ya mahdi 0 182 1404/1/11، 04:06 عصر
آخرین ارسال: ya mahdi
Wink حل شده مقادير لازم در environment variable ᔕinaᗪehghani 24 11,601 1403/10/23، 12:10 صبح
آخرین ارسال: Tggi
  تپسل .....فروشگاه Hamidreza 3 1,932 1403/10/22، 11:57 عصر
آخرین ارسال: Tggi
  خروجی اندروید با Intel xdk ya mahdi 0 131 1403/8/25، 02:08 عصر
آخرین ارسال: ya mahdi

پرش به انجمن: