حلقة اللعبة (Game Loop)

القلب النابض للعبة الذي يدير التحديث والرسم في كل إطار.

ما هي حلقة اللعبة؟

حلقة اللعبة هي العمود الفقري لأي لعبة. إنها حلقة لا نهائية تقوم بما يلي في كل إطار:

  1. معالجة إدخال المستخدم
  2. تحديث حالة اللعبة
  3. رسم الإطار الحالي

💡 لماذا نحتاج إلى حلقة لعبة؟

بدون حلقة لعبة، ستكون اللعبة ثابتة وغير تفاعلية. الحلقة تضمن تحديث اللعبة ورسمها بشكل مستمر.

مثال تفاعلي: حلقة اللعبة

جرب اللعبة التفاعلية أدناه لترى كيف تعمل حلقة اللعبة:

FPS: 0
60 FPS

كود حلقة اللعبة

// تهيئة المتغيرات
let lastTime = 0;
let animationId = null;

// حلقة اللعبة الرئيسية
function gameLoop(timestamp) {
    // حساب الوقت المنقضي
    const deltaTime = timestamp - lastTime;
    lastTime = timestamp;
    
    // تحديث حالة اللعبة
    update(deltaTime);
    
    // رسم الإطار الحالي
    draw();
    
    // طلب الإطار التالي
    animationId = requestAnimationFrame(gameLoop);
}

// بدء اللعبة
function startGame() {
    if (!animationId) {
        lastTime = performance.now();
        gameLoop(lastTime);
    }
}

// إيقاف اللعبة
function stopGame() {
    if (animationId) {
        cancelAnimationFrame(animationId);
        animationId = null;
    }
}

مكونات حلقة اللعبة

1. التهيئة (Init)

يتم تنفيذها مرة واحدة في بداية اللعبة:

  • تحميل الأصول
  • إنشاء الكائنات
  • إعداد واجهة المستخدم

2. التحديث (Update)

تحديث حالة اللعبة:

  • معالجة الإدخال
  • تحديث المواقع
  • الكشف عن التصادمات

3. الرسم (Draw)

رسم الإطار الحالي:

  • مسح الشاشة
  • رسم الخلفية
  • رسم الكائنات

نصائح لتحسين الأداء

💡 نصائح مهمة:

  • استخدم requestAnimationFrame دائمًا
  • استخدم deltaTime للحركة السلسة
  • قلل من عدد عمليات الرسم
  • تجنب إنشاء كائنات جديدة في الحلقة

ما التالي؟

الآن بعد أن فهمت كيفية عمل حلقة اللعبة، يمكنك الانتقال إلى الدرس التالي حيث سنتعلم كيفية إضافة الحركة والتحكم باللاعب.