اشتباهات رایج در استفاده از ایونتهای کانستراکت 2
|استفاده از dt در Every X seconds
کاربران زیادی آموزش «دلتاتایم و استقلال از نرخ فریم» را خواندهاند و از تکنیکهایش در پروژههایشان استفاده میکنند (این آموزش انشاءالله به زودی ترجمه خواهد شد). امّا استفاده از dt (دلتاتایم) در کاندیشن Every X seconds ناشی از درک نادرست استقلال از نرخ فریم است.
ایونتی مثل Every 1 second به خودی خود مستقل از نرخ فریم است. این ایونت زمان را میسنجد، نه فریمها را. در هر ثانیه یکبار اجرا میشود بدون توجّه به نرخ فریم. اگر نرخ فریم 10 FPS باشد در هر ثانیه یکبار اجرا میشود، اگر 60 FPS باشد هم در هر ثانیه یکبار اجرا میشود. این ایونت ربطی به نرخ فریم ندارد که بخواهد اصلاحش کنیم.
اتّفاقاً ایونتی مثل Every 60 * dt seconds وابسته به نرخ فریم است، برخلاف چیزی که میخواستید! در 10 FPS، مقدار dt برابر 0.1 است، بنابراین ایونت هر 6 ثانیه یکبار اجرا میشود. در 60 FPS، مقدار dt حدود 0.016 است، بنابراین ایونت هر 0.96 ثانیه یکبار اجرا میشود. پس این مقدار وابسته به نرخ فریم است، و این چیزی بود که میخواستیم جلوی آن را بگیریم.
از طرف دیگر، اگر تنظیم کنیم که در هر تیک، شیئی یک پیکسل حرکت کند، این حرکت وابسته به نرخ فریم است، چون سرعت حرکت شیء به نرخ فریم بستگی دارد: در 30 FPS با سرعت 30 پیکسل بر ثانیه و در 60 FPS با سرعت 60 پیکسل بر ثانیه حرکت میکند. در اینجا، میتوان از dt استفاده کرد تا شیء با سرعت ثابت حرکت کند. dt زمان سپری شدن یک تیک است، بنابراین اگر شیئی را در هر تیک 60*dt پیکسل حرکت دهیم، آن شیء در هر ثانیه 60 پیکسل حرکت میکند، خواه نرخ فریم 30 FPS باشد، خواه 60 FPS یا هر چیز دیگر. این هدف واقعی اکسپرشن dt است. از این اکسپرشن در ایونتهایی که خودشان مستقل از نرخ فریم هستند استفاده نکنید.
سلام وخسته نباشید به داداش گلم اقامجتبی
من 2تابازیکن دارم که میخوام به هرکدوم یک ماموریت مخصوص بدم که هرکدوم وظیفه داده شده راانجام بده. به طور واضح تربگم میخوام وقتی به پلیر Aماموریت دادم به ماموریتش به پردازه و درهمان زمان من پلیر Bرا ماموریت بدم
ایشالا جوابمو بگیرم
علیک سلام
لطفاً سؤالاتتون رو در انجمن بپرسید.
سلام خسته نباشید
میخواستم بدونم چگونه stop و play برای بازی ام بسازم؟؟؟
ممنون
علیک سلام،
میتونید جلسهی ششم دورهی تابستانی ما رو ببینید:
http://construct2.ir/showthread.php?tid=609
خواهش میکنم