درود مهمان گرامی! ثبت نام
آموزش ساخت بازی در #C آموزش UDK آموزش مدل سازی در Maya
آموزش ساخت بازی در VB آموزش Unity - پروژه محور آموزش مدل سازی با 3Ds Max
آموزش برنامه نویسی اندروید آموزش Unity - ساخت منو آموزش متحرک سازی در 3Ds Max
آموزش ساخت بازی حدس تصویر آموزش Unity - متحرک سازی مجموعه آموزش های ساخت بازی
● آموزش های رایگان ● تبلیغات دیجیتال هوشمند ● استخدام در فرادرس

امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
مشکل جون در روم دوم یا لول دوم؟!
#1
سلام
برای ابجکت امتیاز و جون ایونت روم استارات رو گذاشتم. تا در هر رومی از اول شروع به امتیاز دهی یا کسر جون و امتیاز کنه.

الان بعد اتمام لول اول
وقتی وارد روم دوم میشم. با اولین برخورد به مانع 3 تا جونش صفر میشه؟ و امتیاز سریع شروع به کسر تا 128 میرسه؟؟؟؟!!! در صورتی که برای هر امتیاز 2 تا اضافه یا یکی کسر میشه؟!

چرا تو روم دوم اینطور شده؟
امدم حتی ابجکت دیگه گذاشتم و ابجکت score اولی رو اصلا تو روم دوم نذاشتم؟! و اینارو برای ابجکت score2  تعریف کردم باز هم همون مشکل بالا تکرار میشه؟!

weak what sad  

لطفا کمک کنید
پاسخ
#2
چرا جوابی نیست depressed

مشکلم امتیاز دهی و جون در room دوم یا level دوم بازی هست. قاط میزنه؟
درست عمل نمیکنه؟

کسی نیست امدادی برسونه depressed
پاسخ
#3
الان فهمیدم علت چیه

حتما باید کارکتر دشمن از بین بره .انگار یک جور برخورد دائم بین دشمن و پلیرم هست که سریع سه تا جونش از بین میره.اگه دشمن از بین بره بعد برخورد! یا پلیرم ! درست میشه!! یا مثلا پلیرم برگرد نقطه ی شروع؟

اما من هیچ کدوم از اینارو نمیخوام.
میخوام فقط یکی از جوناش کم بشه و از همون جا ادمه بده به مسیرش بدون حذف دشمن.

راه حلی دارید که اینطور در لحظه ی برخورد سریع 3 تا برخورد رو محاسبه نکنه!
نمیدونم تونستم بگم و بفهمنم منظورمو یا نه؟ not_sure
پاسخ
#4
سلام،
این سوال شما یکم پیچیدگی داره و باید خوب بررسی بشه که کجا داره به کار گرفته میشه؛
به طور کلی شما باید یک متغیر بذارید و مقدار اولیه ش رو 0 (یا false) قرار بدید، بعد وقتی که بازیکن به دشمن برخورد میکنه اون متغیر 1 (یا true) میشه تا توی پردازش های بعدی متوجه بشیم که از قبل برخورد کردیم یا نه. حالا همین 1 کردن و کم کردن قلب بازیکن رو توی یک شرط میذاریم، کدوم شرط؟ اینکه آیا از قبل به دشمن نخورده بودیم؟ (آیا متغیر رو از قبل 1 کرده بودیم یا هنوز 0 هست؟) اینطوری فقط یکبار کم کردن قلب انجام میشه...
اما باید کاری کنیم که وقتی دیگه با دشمن برخورد نداشتیم اون متغیره دوباره 0 بشه؛ پیشنهاد من استفاده از توابعی مثل collision_circle هست در رویداد step (توضیحات بیشتر اینجا و اینجا (انگلیسی))

مثلا:

کد:
if collision_circle(x, y, 20, obj_doshman, false, true)
{
  global.iscol = 1;
}
else
{
  global.iscol = 0;
}
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط asi123
#5
چون قراره فقط یک بار برخورد انجام بشه، نیازی نیست که قضیه رو انقدر پیچیده کنید، کافیه از mask_index استفاده کنید. یه اسپرایت بدون mask ایجاد کن و زمانی که برخورد انجام شد mask_index دشمن رو برابر کن با اسپرایت ایجاد شده، همین، تمام.
پاسخ
 سپاس شده توسط asi123
#6
(10/11/1397، 11:47 عصر)qwerty13 نوشته است: سلام،
این سوال شما یکم پیچیدگی داره و باید خوب بررسی بشه که کجا داره به کار گرفته میشه؛
به طور کلی شما باید یک متغیر بذارید و مقدار اولیه ش رو 0 (یا false) قرار بدید، بعد وقتی که بازیکن به دشمن برخورد میکنه اون متغیر 1 (یا true) میشه تا توی پردازش های بعدی متوجه بشیم که از قبل برخورد کردیم یا نه. حالا همین 1 کردن و کم کردن قلب بازیکن رو توی یک شرط میذاریم، کدوم شرط؟ اینکه آیا از قبل به دشمن نخورده بودیم؟ (آیا متغیر رو از قبل 1 کرده بودیم یا هنوز 0 هست؟) اینطوری فقط یکبار کم کردن قلب انجام میشه...
اما باید کاری کنیم که وقتی دیگه با دشمن برخورد نداشتیم اون متغیره دوباره 0 بشه؛ پیشنهاد من استفاده از توابعی مثل collision_circle هست در رویداد step (توضیحات بیشتر اینجا و اینجا (انگلیسی))

مثلا:

کد:
if collision_circle(x, y, 20, obj_doshman, false, true)
{
  global.iscol = 1;
}
else
{
  global.iscol = 0;
}
نگرفتم چه کنم weak
پاسخ
#7
(11/11/1397، 02:39 صبح)ArminaGames نوشته است: چون قراره فقط یک بار برخورد انجام بشه، نیازی نیست که قضیه رو انقدر پیچیده کنید، کافیه از mask_index استفاده کنید. یه اسپرایت بدون mask ایجاد کن و زمانی که برخورد انجام شد mask_index دشمن رو برابر کن با اسپرایت ایجاد شده، همین، تمام.

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


این mask-index هم نمیدنم چیه داداش sad

الان همین کلمه رو جستجو کردم شاید اموزشی چیزی ازش پیدا کنم نبود!

میشه یه سورس از این کاری که میگید بذارید؟؟! ببینم چیه
پاسخ
#8
دوست خوب من، اگر این مفاهیم رو ندونی سورس بیشتر گیجت میکنه و نمی تونی از اون توی پروژه ی خودت درست استفاه کنی، این توضیح کوتاهی رو که میدم اگر دقیقا اجرا کنی مشکلت کاملا حل میشه:
1.یه اسپرایت خالی ایجاد کن و اسم اون رو بزار spr_empty
2.توی ایونت Collision دشمن که به پلیر نسبت دادی این کد رو بزار :
کد:
mask_index = spr_empty
پاسخ
 سپاس شده توسط asi123
#9
(11/11/1397، 02:39 صبح)ArminaGames نوشته است: چون قراره فقط یک بار برخورد انجام بشه، نیازی نیست که قضیه رو انقدر پیچیده کنید، کافیه از mask_index استفاده کنید. یه اسپرایت بدون mask ایجاد کن و زمانی که برخورد انجام شد mask_index دشمن رو برابر کن با اسپرایت ایجاد شده، همین، تمام.

خداوکیلی ماسک ایندکس پیچیده تره ها straight
بعد هم فکر میکنم بیشتر از یک بار برخورد وجود داره، مگر نه؟
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
#10
ببینید، تابع collision_circle کارش بررسی برخورد ما با یک آبجکت خاص هست(توابع دیگه ای هم هستن اما این یکی به صورت دایره ای بررسی میکنهsmiley
resim
حالا اگر ما این تابع رو داخل یک if بذاریم میتونیم متوجه بشیم که به آبجکت خاص خودمون برخورد کردیم یا نه.
قضیه اون متغیری که با برخورد 1 و بعدش دوباره 0 میشه رو متوجه شدید؟
کیــــــــــ qwerty13 ـــــــوورتی13
پاسخ
 سپاس شده توسط asi123




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