# جعل الحركة تعتمد على الوقت، وليس عدد الإطارات

> قم بتطبيق الوقت المنقضي على حركة اللعبة، واختيار سياسة اللحاق بالركب الآمنة، واختبار الحركة بمعدلات تحديث مختلفة وبعد التوقف.

- URL: https://oneshotgems.ai/ar/topics/delta-time-in-games
- الفئة: لمطوري الألعاب
- النوع: دليل
- آخر تحديث: 5 أكتوبر 2026

وقت دلتا هو الوقت المنقضي بين التحديثات. يؤدي ضرب السرعة في الثواني المنقضية إلى السماح للكائن بتغطية مسافة مماثلة خلال الثانية سواء كان المتصفح يرسم 45 إطارًا أو 144 إطارًا. الجزء الصعب هو تحديد ما يجب فعله عندما يصبح الوقت المنقضي كبيرًا بشكل غير عادي. إذا تم تعليق علامة تبويب أو قامت مهمة مكلفة بحظر الخيط الرئيسي، فإن تطبيق الفجوة بأكملها بشكل أعمى يمكن أن يؤدي إلى إنشاء قفزة متسقة رياضيًا ولكنها غير سارة للعب.

## أبقِ الوحدات مرئية في الكود

اختر وحدة زمنية واحدة واستخدمها باستمرار. إذا عُبّر عن السرعة بالبكسل في الثانية وعن دلتا بالثواني، يتقدم الموضع بمقدار السرعة × دلتا. للتحقق يدوياً، حرّك علامة مضبوطة على 80 بكسلاً في الثانية لمدة عشر ثوانٍ؛ ينبغي أن تقطع نحو 800 بكسل في عالم اللعبة، بصرف النظر عن عدد مرات الرسم.

لا تخلط المللي ثانية من performance.now() بسرعة معبّر عنها في الثانية ما لم تقسّم على 1,000. أدرج الوحدات في أسماء القيم، مثل deltaSeconds وspeedPixelsPerSecond، كي لا يؤدي تعديل لاحق إلى مضاعفة حركة صغيرة ألف مرة من دون ملاحظة.

## حدّ من أثر التوقف المفاجئ

في لعبة حركة بسيطة، ضع حداً أقصى مقصوداً لقيمة دلتا واقبل أن تتباطأ المحاكاة مؤقتاً تحت الحمل الشديد. أما في محاكاة فيزيائية تتطلب خطوات قابلة للتكرار، فاجمع الوقت وتقدم بخطوات ثابتة، مع تحديد عدد خطوات التعويض حتى لا تهيمن عملية الاسترداد على الصفحة. لكل نهج مزايا وتنازلات؛ اختر وفق إحساس اللعبة وقواعدها.

اختبر بإضافة توقف اصطناعي بين التحديثات، ثم قارن الحركة في خط مستقيم بالتصادم عند نهاية المسار. إذا مر الجسم عبر عائق رفيع، فقد تحتاج إلى خطوات فرعية أصغر أو اختبار تصادم بالمسح؛ فتغيير معدل الرسم وحده لا يصلح المشكلة المتعلقة بقواعد اللعبة.

## أسئلة

**هل وقت دلتا يجعل الفيزياء حتمية؟** لا. قد تؤدي فترات التحديث المتغيرة إلى نتائج تكامل مختلفة. تحسّن خطوة المحاكاة الثابتة قابلية التكرار، لكن توقيت الإدخال وتفاصيل الأعداد ذات الفاصلة العائمة تظل مهمة.

**ما هي الساعة التي يجب أن تعرض الوقت المنقضي؟** استخدم الطابع الزمني لرد اتصال الرسوم المتحركة أو performance.now()؛ يصف MDN كليهما كمصدري توقيت عالي الدقة. لا تستخدم التواريخ المدنية لفترات الإطارات القصيرة، لأن تعديلات ساعة النظام لا علاقة لها بزمن المحاكاة.

## اتبع فضولك

- [أنشئ حلقة ألعاب موثوقة في المتصفح](https://oneshotgems.ai/ar/topics/browser-game-loop): قم ببناء تحديثات لعبة المتصفح والرسم حول إطارات الرسوم المتحركة دون ربط سرعة المحاكاة بمعدل تحديث شاشة اللاعب.
- [اختر عمليات التحقق من التصادم للعبة صغيرة](https://oneshotgems.ai/ar/topics/game-collision-detection): اختر تمثيل التصادم الذي يناسب لعبتك، وقلل من عمليات التحقق الزوجية غير الضرورية، وقم بتشخيص الكائنات التي تمر عبر العوائق.
- [استخدم خطوة زمنية ثابتة لفيزياء اللعبة](https://oneshotgems.ai/ar/topics/fixed-timestep-game-physics): تحديثات فيزيائية منفصلة عن العرض بخطوة محاكاة ثابتة وأعمال اللحاق بالحدود واختبارات الأكشاك والاصطدامات.

## للمزيد من القراءة

- [MDN: توقيت requestAnimationFrame()](https://developer.mozilla.org/en-US/docs/Web/API/Window/requestAnimationFrame)
- [MDN: Performance.now()](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now)

---
الصفحة الأساسية: https://oneshotgems.ai/ar/topics/delta-time-in-games
