(1398/10/18، 05:05 عصر)mahdi.p نوشته است: سلام بکس
کسی سورس مثل بازی کلش نداره یا نمیتونه درست کنه؟
البته منظورم از کلش مبارزه ی کاراکترهاس
یعنی ما چندتا کارت داریم میذاریم توی بازی و میره به سمت حریف , چطور بهش بگیم به اولین حریفی که رسیدی اول به اون حمله کن و وقتی نابود شد بره سراغ حریف بعدی؟
اینو من واقعا گیج شدم و نمیدونم چطور باید اینکارو کرد
چون هم باید رهگیری کنه هدف رو هم بره سمتش بعد که رسید بهش باهاش بجنگه وقتی مرد دوباره هدف بهدی رو رهگیری کنه بعد به اون حمله کنه و حالا اگه کسی نبود بره به سمت قلعه
هوووف خیلی خسته
اگه یکی میتونه صواب داره درست کنه برامون
سلام؛
فرض کنیم حریف ها متحرک هستن و فقط یک کاراکتر داریم؛
شما کافیه به تعداد حریف ها متغیر بسازین و بگین که موقعیت (مختصات) لحظه ای هر کدوم توی متغیر مربوطه ذخیره بشه؛
در ضمن یک متغیر هم بسازین که موقعیت (مختصات) لحظه ای پلیر توش ذخیره بشه؛
بعد بگین هر وقت پلیر نزدیک تر بود به مختصات هر کدوم اول به اون حمله کنه.... به عبارتی هر وقت فاصله پلیر کمتر بود با هر کدوم از حریف ها اول به اون حمله کنه که برای این میتونین از یک رابطه ساده توی مبحث معادله خط در ریاضیات استفاده کنین:
فرمولش به این شکله:
اگر دو نقطه A و B مختصاتشان به ترتیب (x1,y1) و (x2,y2) باشند برای محاسبه فاصله (AB) داریم:
(2^(AB = rad((x1-x2)^2+(y1-y2
(rad به معنای رادیکال هست)- البته لازم نیست از این رابطه خودتون استفاده کنین بلکه می تونین از اکسپرشن distance که در خود کانستراکت هست برای تعیین فاصله دو نقطه استفاده کنین به شکل زیر:
کد:
distance(x1,y1,x2,y2)
اگر کشته شد (یعنی مثلاً نوار سلامت حریف اول تموم شد و یا سلامت به صفر رسید) مقدار متغیر مربوطش تغییر بکنه به عدد یک که معنیش اینه نابود شده؛
بعد مجدد پروسه تشخیص نزدیکترین فاصله انجام میشه و ادامه ماجـرا.... (معنیش اینه در شناسایی های اولیه به بعد باید معیار اینکه حریفمون توی بازی باشه یا نه این باشه که مقدار متغیر مربوطه اش یک نباشه.....)
برای رسیدن به قلعه هم اگر هیچ حریفی نبود و مقدار متغیرهای مربوطه صفر بود معنیش اینه که راه برای رسیدن به قلعه بازه!
پ.ن: البته میتونین برای هر کدوم از حریف ها یک متغیر مستقل نسازین و فقط بیاین یک متغیر بسازین و مختصات لحظه ای هر اسپرایت رو هر لحظه داخل همون متغیر ذخیره کنین و بینشون با یک علامت bitwise or و یا هر کاراکتر جداکننده دیگه ای فاصله بندازین؛
مثلاً:
کد:
Sprite.X&","&Sprite.Y&"|"&Sprite2.X&","&Sprite2.Y&"|"
در نظر داشته باشین که طول و عرض مختصات هر حریف باید با یک کاما از هم جدا بشن تا بشه تشخیص داد کدوم طول هست و کدوم عرض......
بعد با استفاده از اکسپرشن tokenat مقدار هر اسپرایت حریف رو هر لحظه جدا کنین و فاصله اش رو با پلیر طبق فرمولی که گفتم حساب کنین و بعد تصمیم گیری بشه......
در صـورتی که یک متغیر برای همه حریف ها تعریف کنین در مقابلش باید یک متغیر جدا هم بسازین مثلاً با نام health_stat که با کشته شدن هر حریف مقدارش وضعیت آنی و لحظه ای سلامت هر حریف رو نمایش بده؛ مثلاً بگه اسپرایت یک موجود و اسپرایت فلان ناموجود...... ضمناً وضعیت هر اسپرایت حریف با یک کاراکتر مثل bitwise or باید جدا بشه؛ علاوه بر این مقدار پیشفرض هر اسپرایت حریف روی وضعیت موجوده؛
مثال:
با محو شدن اسپرایت یک از صفحه وضعیت اسپرایت یک رو (یعنی در واقع مقدار پیشفرض اسپرایت یک در متغیر حریف ها رو) به مقدار صفر (ناموجود) تغییر میدیم؛ توجه کنین که مقدار یک به معنی موجود بودن هست........
اجازه بدین اول مقدار پیشفرض رو بررسی کنیم؛
کد:
"Sprite1"&","&"1"&"|"&"Sprite2"&","&"1"
می بینیم که هر دو اسپرایت حریف در وضعیت موجود (یک) هستن؛
حالا بعد از محو شدن اسپرایت یک داریم:
کد:
"Sprite1"&","&"0"&"|"&"Sprite2"&","&"1"
مشخصه که چون اسپرایت یک از بین رفته و محو شده مقدارش باید به صفر تغییر کنه که این اتفاق میفته.....
بعد میگیم بعد از هر کشته شدن بررسی کنه دقیقاً کیا از دور بازی حذف شدن (یعنی مقدارشون صفر شده) و اونا رو توی یک متغیر جدا به نام kicked_out قرار میدیم (برای اینکار بازم اکسپرشن tokenat به کار میاد) و بعد برای حملات بعد پلیر به اون استناد میکنیم...... یعنی اونایی که عملاً از دور کار خارج شدن دیگه کاندیدای حمله نیستن و فقط فاصله پلیر رو با اونایی که جزء مقدار متغیر kicked_out
نیستن میسنجیم.......
***** این راهیه که با دیدن سوال شما و آنی به ذهنم رسید و شاید دوستان راه های بهتری داشته باشن....*****
***** بد نبود یه تاپیک جداگانه برای پرسشتون باز میکردین ...... *****
موفق باشین