حل شده فوری ؛ کم شدن مقدار از متغیر محلی
#1
سلام دوستان . من یه متغیر ایسنتس دارم تو یه اسپرایت که یه رشته از IID های یک شیء دیگه (مثلا sprite2) رو داره (مثلا اینطوری : 0-3-6-9-12) . حالا میخوام بگم در صورتی که اسپرایت 2 حذف شد بیا بررسی کن ببین (درواقع سرچ کن) تو این رشته بالا ببین IID بود توش یا نه که اگه بود اون رو به همراه خط تیره جلوش حذفش کن . اینو نمیدونم چطوری بگم ؟
استودیو بازیسازی ایروید
جدید ترین ها : شهرزاد ، دربند;1357 و ATOM
[تصویر:  ads.gif]
  پاسخ


 سپاس شده توسط:
#2
(1399/4/24، 10:10 عصر)محمد 82 نوشته است: سلام دوستان . من یه متغیر ایسنتس دارم تو یه اسپرایت که یه رشته از IID های یک شیء دیگه (مثلا sprite2) رو داره (مثلا اینطوری : 0-3-6-9-12) . حالا میخوام بگم در صورتی که اسپرایت 2 حذف شد بیا بررسی کن ببین (درواقع سرچ کن) تو این رشته بالا ببین IID بود توش یا نه که اگه بود اون رو به همراه خط تیره جلوش حذفش کن . اینو نمیدونم چطوری بگم ؟
سلام؛
اولاً به جای چنین ساختاری بهتره از ساختار جیسون استفاده کنین یا از یک دیکشنری یا آرایه استفاده کنین تا بتونین حساب اسپرایت ها رو داشته باشین و کارتون ساده تر باشه.
اما با همین ساختار فرضی که شما خودتون ابداع کردین میتونین از عبارات با قاعده (Regex) استفاده کنین. قبل از هر چیز باید تشخیص بدین که به طور مثال عدد 12 در مقدار متغیر موجوده یا خیر. برای این کار کاندیشن Test Regex رو انتخاب کنین. در قسمت  String رشته موردنظرتون جهت پردازش (اکسپرشنی که مقدار متغیر رو دریافت کنه) رو وارد کنین و در فیلد  Regex هم مقدار زیر رو وارد کنید:
کد:
"(^|\D)Y($|\D)"
به جای Y در عبارت بالا شماره موردنظرتون رو قرار بدین. گزینه  Flags رو هم دقیقاً برابر با مقدار زیر قرار بدین:
کد:
"g"
حالا در صورتی که عدد موردنظر شما موجود باشه اکشن هایی که رو به روی این کاندیشن تعریف کردین اجرا میشن. چون قصد دارین عددی که موجود هست رو حذف کنین پس باید اکشنی بزنین که این کارو انجام بده. برای تغییر مقدار متغیر و حذف اون اکشن Set Value رو انتخاب کنین و دقیقاً دستورات زیر رو بهش مقدار بدین:
کد:
RegexMatchCount(RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"[-]","g") = 2 ? replace(V,RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"-") : replace(V,RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"")
به جای Y در دستور بالا شماره موردنظرتون رو قرار بدین و به جای V هم اکسپرشنی رو بنویسید که مقدار متغیر رو نمایش میده (مثلاً Variable1). 
کار تمومه و مقدار موردنظر شما هم شناسایی و هم حذف میشه.
در ضمن به خاطر داشته باشین همونطور که گفتم بهتره در چنین حالتی از دیکشنری یا آرایه و یا فرمت جیسون استفاده کنین که استانداردتره. 
موفق باشین.
غایب
  پاسخ


 سپاس شده توسط: محمد 82 ، kakmamad
#3
یاخدا اینا چیه؟ راه ساده تری نداره ؟

ارایه و ... روبه ذهنم رسید اما اینا متغیر اینستنس یه اسپرایتن و تعداد اسپرایت مشخص نیست و به نظرم در این کار ارایه و دیکشنری کار رو پیچیده تر میکنن و منم که همیشه دنبال ساده ترین راهم
استودیو بازیسازی ایروید
جدید ترین ها : شهرزاد ، دربند;1357 و ATOM
[تصویر:  ads.gif]
  پاسخ


 سپاس شده توسط:
#4
(1399/4/25، 03:55 صبح)محمد 82 نوشته است: یاخدا اینا چیه؟ راه ساده تری نداره ؟
ارایه و ... روبه ذهنم رسید اما اینا متغیر اینستنس یه اسپرایتن و تعداد اسپرایت مشخص نیست و به نظرم در این کار ارایه و دیکشنری کار رو پیچیده تر میکنن و منم که همیشه دنبال ساده ترین راهم
به نظر من ساده ترین راه اینه که از عبارات با قاعده استفاده کنین. قبلاً مباحث پایه و کاربردی عبارت با قاعده رو در این تاپیک در انجمن به صورت خلاصه بیان کردم. گرچه تاپیکی که نوشتم صد درصد مطالب راجع به عبارات با قاعده رو پوشش نمیده اما بخش عمده ای از دستورات پرکاربرد رو ذکر کردم. اگر فقط بدونین که عبارات با قاعده چی هستن مطمئناً به این نتیجه میرسین که ساده ترین راه همینه.
برای اینکه بیشتر متوجه ماجرا بشین اجازه بدین یک مقدار ساختار های شرطی که تعریف کردم رو بازتر کنم البته قبلش نیم نگاهی به تاپیکی که مربوط به عبارات با قاعده است داشته باشین تا بفهمین داستان از چه قراره دقیقاً.
در کانستراکت ما میتونیم شروط رو برای اکسپرشن ها به شکل زیر لحاظ کنیم:
کد:
در غیر اینصورت : اتفاقی که در صورت صحیح بودن شرط بیفته ? شرط
حالا چنین شرطی تعریف کردیم:
کد:
RegexMatchCount(RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"[-]","g") = 2 ? replace(V,RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"-") : replace(V,RegexMatchAt(V, "(^|\D)Y($|\D)", "g", 0),"")
خُب حالا فرض کنیم یک سری (دنباله) به شکل زیر داریم:
کد:
0-3-9-6-12-1
در کل میتونیم برای استخراج هر یک از اعضا سه حالت داشته باشیم. یعنی عدد موردنظر شما یا میتونه بین دو خط تیره قرار گرفته باشه (-Y-) یا قبلش یک خط تیره قرار گرفته باشه (Y-) و یا بعدش یک خط تیره قرار گرفته باشه (-Y). حالا چه زمانی هر یک از حالاتی که گفتیم رُخ میده؟
  • * زمانی بعد از عدد موردنظر یک خط تیره داریم که عدد موردنظر دقیقاً اولین عضو سری (دنباله) ما باشه. در مثالی که بالاتر زدم عدد صفر میتونه تنها کاندید این حالت باشه. 
  • زمانی عدد موردنظر ما بین دو خط تیره قرار میگیره که جزء اعضای وسطی سری (دنباله) باشه. مثلاً (-Y-)
  • زمانی عدد موردنظر ما قبلش یک خط تیره واقع میشه که در واقع آخرین عضو از سری (دنباله) باشه. مثلاً (Y-)
خُب حالا برگردیم به شرطی که تعریف کردیم؛
در اولین شرطی که بیان کردیم گفتیم که در صورتی که عدد جدا شده به کمک عبارت با قاعده ای که در کاندیشن Test Regex تعریف کردیم دارای دوتا خط تیره بود معنیش اینه که عدد موردنظر ما از اعضای وسطی سری (دنباله) هست و به جای اون (-Y-) باید یک خط تیره قرار بدیم (جایگزین کنیم).
در قسمت در غیر اینصورت گفتیم که مقدار (Y-) و یا (-Y) رو با یک فضای خالی (دابل کوتیشن) جایگزین کن. اما چرا؟ چون از نظر منطقی وقتی عدد موردنظر ما در شرط اول صدق نکنه (جزء اعضای وسطی سری نباشه) پس طبیعتاً یا اولین عضو و یا آخرین عضو سری ما هست. 
اگر نیم نگاهی به بحث عبارات با قاعده داشته باشین مطمئناً کاملاً متوجه اتفاقی که میفته میشین.
موفق باشین.
غایب
  پاسخ


 سپاس شده توسط:
#5
دم شما گرم از توضیحات کاملت . الان یه سوال : اگه sprite من روی یه سری sprite2 که فریمشون 1 هستن باشه ، چطور میتونم بگم متغیر داخلی sprite هرلحظه بشه IID اون اسپرایت هایی که روشه ؟ هرلحظه بررسی بشه ولی یکبار اضافه بشه یعنی همینطوری مثلا 1-1-1-1.... اضافه نشه . 
اینکار باید با همین regex ها انجام بشه یا راه دیگه ای هست ؟ اگه اینکاری که گفتم هرلحظه انجام بشه نیاز به replace بالا دیگه نیست . 
مثال : مثلا اسپرایت روی چنتا area فریم 1 قرار داره . متغیر داخلی اسپرایت بشه IID اون area ها . مثلا اگه رو 3 تاست بشه 0-2-5 . حالا اگه این متغیر هر لحظه بررسی بشه اگه یکی از این area ها حذف میشه متغیر خودش میشه 0-2 . اینو نمیدونم چطوری هرلحظه بگم که اگه بگم دیگه نیازی به replace نیست .
استودیو بازیسازی ایروید
جدید ترین ها : شهرزاد ، دربند;1357 و ATOM
[تصویر:  ads.gif]
  پاسخ


 سپاس شده توسط:
#6
(1399/4/25، 03:46 عصر)محمد 82 نوشته است: دم شما گرم از توضیحات کاملت . الان یه سوال : اگه sprite من روی یه سری sprite2 که فریمشون 1 هستن باشه ، چطور میتونم بگم متغیر داخلی sprite هرلحظه بشه IID اون اسپرایت هایی که روشه ؟ هرلحظه بررسی بشه ولی یکبار اضافه بشه یعنی همینطوری مثلا 1-1-1-1.... اضافه نشه . 
اینکار باید با همین regex ها انجام بشه یا راه دیگه ای هست ؟ اگه اینکاری که گفتم هرلحظه انجام بشه نیاز به replace بالا دیگه نیست . 
مثال : مثلا اسپرایت روی چنتا area فریم 1 قرار داره . متغیر داخلی اسپرایت بشه IID اون area ها . مثلا اگه رو 3 تاست بشه 0-2-5 . حالا اگه این متغیر هر لحظه بررسی بشه اگه یکی از این area ها حذف میشه متغیر خودش میشه 0-2 . اینو نمیدونم چطوری هرلحظه بگم که اگه بگم دیگه نیازی به replace نیست .
سلام دوباره؛
خُب به نظرم شما بهتره یک تابع بسازین تا هم مقادیر جدید رو اضافه کنه و هم چک کنه که اون مقدار از قبل موجود هست یا خیر. هر کجا هم که لازم بود تابع رو فراخوانی کنین.
غایب
  پاسخ


 سپاس شده توسط: محمد 82 ، oak


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  خروجی اندروید با Intel xdk ya mahdi 2 357 1404/7/2، 07:00 عصر
آخرین ارسال: mehdi1100
  دانلوذ کوکون amirgoli 3 1,640 1404/6/27، 03:32 عصر
آخرین ارسال: Klkj
Information پرداخت درون برنامه مایکت کوردوا ya mahdi 0 456 1404/1/17، 05:43 عصر
آخرین ارسال: ya mahdi
  نحوه خروجی اندروید کوردوا ya mahdi 0 396 1404/1/11، 04:06 عصر
آخرین ارسال: ya mahdi
Wink حل شده مقادير لازم در environment variable ᔕinaᗪehghani 24 12,399 1403/10/23، 12:10 صبح
آخرین ارسال: Tggi

پرش به انجمن: