یه قسمت بازی مشکل داری میدونین کجاش ؟
#1
سلام راستش هرچی گشتم ندیدم مشکل از کجاست !! 
فرض کنین یه بازی مثل دودل جامچه که floor های یا سکو ها ساخته میشن خیلی عادی و با سرعت عادی بالا میرن من سیستم پاس درست کردم براشون که وقتی سر پاس کلیک میکنی همه چی متوقف میشه یعنی سرعت بازی کن سرعت ساخته شدن سکو و سرعت حرکت سکو سفر بشه و اگر باز سر پاس کلیک کردیم برگرده به حالت اول اما : 
وقتی پاس میکنیم و دوباره شروع رو میزنیم یکی دوتا سکوی اضافی اینور اونور ساخته میشن و بعد ادامه ی بازی معمولیه اگر پشت سر هم 10 بار پاس بزنیم کلی سکو ساخته میشه و بعد ادامه ی بازی در کل اشکال داره نمیدونم از کجاست 
[تصویر:  u899g6h8an5smad5ulsy.png]
[تصویر:  6l8xe38k2rszvafb1cbz.png]
  پاسخ


 سپاس شده توسط:
#2
سلام. روش استاندارد ساخت Pause، همون تایم‌اسکال هست. اگه هم یه جاهایی از بازی با تایم‌اسکال متوقّف نشد (که در بعضی مواقع اتّفاق می‌افته) می‌تونستید بپرسید و خیلی راحت به جوابش برسید.

حالا از این بگذریم، چیزی که در ایونت‌شیت بالا به نظر من مشکوکه و کار رو خراب می‌کنه، اینه که در هنگام توقّف Floor_Create_Time رو مساوی صفر قرار می‌دین و بعد از Resume شدن، اونو به مقدار قبلش بر می‌گردونید. این یک کار اضافی به نظر می‌رسه. به چه دلیل مقدارش رو صفر می‌کنید؟ اگه این کارو انجام ندین که مشکلی پیش نمیاد.

باز هم توصیه می‌کنم برای پاوس از تایم‌اسکال استفاده کنید.
معجزات طبیعت هایی هستند که با آن‌ها مأنوس نشده‌ایم
و طبیعت معجزه‌ایست که با آن انس گرفته‌ایم
علی صفایی حائری
  پاسخ


 سپاس شده توسط: seyed
#3
الان با موبایل ولی اره حق با تو هست به احتمال زیاد همون باید باشه
.
تایم اسکیل برای زمانه زمان مثل انیمیشن و... ولی من از اکشن move at angle استفاده کردم و distance. رو برابر متغیر عددی قرار دادم پس وقتی متوقف میشه که این مقدار صفر باشه و دلیلی نداره بعد از اسکیل تایم انجین دست به مقدار متغیر های ما بزنه
  پاسخ


 سپاس شده توسط:
#4
خوشم اومد تلفّظ رو رعایت می‌کنید (تایم‌اسکیل). 4
راهش خیلی ساده‌ست. یک ضرب در 60 ضرب در dt اضافه کنید حل می‌شه. یعنی اگه قبلاً به این شکل بوده:

[تصویر:  withoutDt.png]

حالا به این شکل در بیاریدش:

[تصویر:  withDt.png]

حالا شیء شما دارای یک ویژگی خارق‌العاده می‌شه، یعنی استقلال از فریم‌ریت. حالا وقتی تایم‌اسکیل رو صفر کنید، به تبع اون اختلاف زمان (دلتاتایم یا dt) هم صفر می‌شه و این شیء هم می‌ایسته و با تایم‌اسکیل مشکلی نخواهد داشت.

بهتره تا حد ممکن بازی‌هاتون رو مستقل از فریم‌ریت طرّاحی کنید.
معجزات طبیعت هایی هستند که با آن‌ها مأنوس نشده‌ایم
و طبیعت معجزه‌ایست که با آن انس گرفته‌ایم
علی صفایی حائری
  پاسخ


 سپاس شده توسط: orache ، seyed
#5
خخخخخ خوب باید درست گفت دیگه  4  
.
اره درست شد  4  حواسم نبود اصلا که میشه ضربدر زمان کرد ولی نفهمیدم چرا ضربدر 60 شد بعد دلتا تایم مگر دلتا تایم چیکار میکنه ؟ یه راهنمایی ای بکن ! 
ممنون 
  پاسخ


 سپاس شده توسط:
#6
کلید رسیدن به استقلال از فریم ریت، اکسپرشن سیستمی dt است. dt مخفف delta-time می‌باشد. دلتا (∆) به معنی تغییر در یک کمیّت است، بنابراین دلتا تایم (t∆) یعنی تغییرات زمان از تیک قبلی تا حالا در واحد ثانیه (به زمان سپری شدن یک فریم در بازی تیک گفته می‌شود).

برای مثال dt در ۱۰۰FPS می‌شود 0.01 (یک صدم ثانیه)، و در 10FPS می‌شود 0.1 (یک دهم ثانیه)، در عمل، مقدار dt در هر تیک نسبت به تیک دیگر فرق دارد، پس بعید است که در مدّتی طولانی dt ثابت باقی بماند.

اگر یک متغیّر بسازید و تنظیم کنید در هر تیک (Every tick) به اندازه‌ی dt به آن اضافه شود، آنگاه می‌بینید که در هر ثانیه یکی به آن اضافه می‌شود، زیرا جمع تمام زمان‌های بین تیک‌ها در یک ثانیه همان یک ثانیه می‌شود! (با افزودن dt به یک متغیّر به طور دستی می‌توانید یک تایمر ایجاد کنید.)

در حالت عادی ایونت‌ها در هر تیک یک بار بررسی می‌شوند، یعنی وقتی شما در ایونتی تنظیم می‌کنید یک شیء x پیکسل حرکت کند، در اصل در هر تیک x پیکسل حرکت می‌کند، حالا در حالت ایده‌آل هر ۶۰ تیک یک ثانیه می‌شود، ولی به مجموع دلتاتایم در هر ثانیه (۶۰ تیک) فقط یکی اضافه می‌شه، بنابراین ۶۰ برابرش می‌کنیم، تا سرعت شیءتون با سرعت فعلی فرق نکنه.
معجزات طبیعت هایی هستند که با آن‌ها مأنوس نشده‌ایم
و طبیعت معجزه‌ایست که با آن انس گرفته‌ایم
علی صفایی حائری
  پاسخ


 سپاس شده توسط: orache ، wowxpria ، [M.H.P] ، seyed
#7
متوجه نشدم باز 100 رو یک صدم میکنه پس برای اینکه فرقی نکنه باید ضربدر 100 بکنیم و برای 10 باید ضربدر 10 بکنیم چرا همه رو ضربدر 60 میکنیم درست میشه پس ؟  20
 
  پاسخ


 سپاس شده توسط:
#8
خوب این یعنی استقلال از فریم‌ریت، در حالت ایده‌آل بازی 60FPS است. مثلاً اگه فریم‌ریت بازی 60FPS باشه دلتاتایم می‌شه یک‌شصتم ثانیه، حالا مثلاً اگه ما تنظیم کرده‌باشیم dt * 60 پیکسل در هر تیک حرکت کنه، در هر تیک یک پیکسل حرکت می‌کنه و چون فریم‌ریت ما 60FPS بود، هر ثانیه می‌شه شصت تیک و در نتیجه در هر ثانیه 60 پیکسل حرکت می‌کنه (یعنی با سرعت ۶۰ پیکسل بر ثانیه)

حالا در یک کامپیوتر ضعیف، که بازی رو با فریم‌ریت مثلاً 10FPS اجرا می‌کنه، دلتاتایم می‌شه 0.1 ثانیه، حالا dt * 60 می‌شه 0.1 * 60 یعنی 6 پیکسل در هر تیک، چون فریم‌ریت بازی 10FPS هست، هر ده تیک می‌شه یک ثانیه، در نتیجه شیء ما در هر ثانیه 60 پیکسل حرکت می‌کنه (یعنی باز هم با سرعت ۶۰ پیکسل بر ثانیه)

همون طور که دیدید، اگه بازی ما مستقل از فریم‌ریت باشه، در هر کامپیوتر، چه قوی، چه ضعیف، با سرعت یکسان اجرا می‌شه، چون سرعت شیء در هر فریم‌ریتی یکسان هست. ولی بازی‌های وابسته به فریم‌ریت در کامپیوترهای قوی سریع‌تر از کامپیوترهای ضعیف اجرا می‌شوند.
معجزات طبیعت هایی هستند که با آن‌ها مأنوس نشده‌ایم
و طبیعت معجزه‌ایست که با آن انس گرفته‌ایم
علی صفایی حائری
  پاسخ


 سپاس شده توسط: seyed
#9
گرفتم
ببین یه مشکل دیگه هم دارم میتونی جواب بدی  ؟ الان دیگه مخم کار نمیکنه خیلی پشت کامپیوتر بودم اینو تموم کنم چون چند روزی کامپیوتر دستم نیست باید الان درست کنم 
وقتی میمیرم میخام امتیازمو ثبت کنه مثلا score2 = score ولی نمیشه چون گفتم بعد از اینکه باختیم اسکور صفر باشه هیچ جوری هم نمیتونم درست کنم البته تو عکس زیر هنوز نساختم ولی نگاه کنین ببینین چجوری میشه ساخت ؟ در واقع هر کاری کنم بالاخره متغیر مردن برابر یس هست و تا کلیک نکنیم سر چیزی یس میمونه مشکل اینجاست نمیتونم بذارم وقتی کلیک کردیم متغیر صفر بشه و اونت 1 بار اجرا شه چون وقتی میمیریم پنل میاد بالا و 2 تا دکمه ای که قراره بزنیم و متغیر مردن no بشه بالای این 2 تا دکمه امتیاز فعلی رو نوشته 
ممنون 
http://8pic.ir/images/62t1of9llt1zgrlnsx3f.png
  پاسخ


 سپاس شده توسط:
#10
من نفهمیدم مشکلتون دقیقاً چیه. چون اینو که راحت می‌شه قبل از این‌که امتیاز رو صفر کنید اوّل تو اون متغیّر دیگه ذخیره‌کنید، بعد امتیاز رو صفر کنید. اگه هم مشکل اینه که یک ایونت بیشتر از یکبار اجرا می‌شه، با یه Trigger once ساده می‌تونید حلش کنید.
معجزات طبیعت هایی هستند که با آن‌ها مأنوس نشده‌ایم
و طبیعت معجزه‌ایست که با آن انس گرفته‌ایم
علی صفایی حائری
  پاسخ


 سپاس شده توسط: seyed


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

پرش به انجمن: