
خطوات برمجة لعبة على Cocos2d دليل شامل 2026
يُعد Cocos2d من أشهر محركات الألعاب ثنائية الأبعاد (2D)، ويوفر هيكلاً
قوياً ومنظماً لبناء الألعاب. يتمحور تطوير الألعاب في Cocos2d حول ثلاثة مفاهيم أساسية:
المشاهد (Scenes)، والطبقات (Layers)، والكائنات المتحركة (Sprites).
تصميم لعبة بسيطة على إطار عمل Cocos2d يتطلب فهم التسلسل الهرمي للمكونات.
نحن ننتقل من المستوى الأعلى (المشهد) إلى المكونات الأصغر (الكائنات) لتنفيذ
منطق اللعبة والتأكد من استمرارية بيانات المستخدم (النقاط والمراحل).
خطوات برمجة لعبة على Cocos2d: من الواجهة إلى حفظ النقاط
تتكون لعبة Cocos2d من ثلاثة عناصر هيكلية أساسية: المشهد (Scene)،
الذي يمثل شاشة اللعبة الحالية؛ الطبقة (Layer)، التي تُستخدم لتنظيم الكائنات المتحركة
وواجهة المستخدم؛ و الكائن المتحرك (Sprite)، الذي يمثل العناصر المرئية المتحركة في اللعبة.
يتم التعامل مع حفظ إعدادات اللعبة البسيطة (مثل الصوت، أو آخر مرحلة تم اللعب فيها،
أو أعلى النقاط) في Cocos2d باستخدام فئة UserDefault، والتي تخزن البيانات في
شكل ثنائيات (Key-Value) على الجهاز المحلي.
يجب أن تكون الخطوة الأولى عند برمجة واجهة لعبة في Cocos2d هي إنشاء مشهد (Scene)،
ثم إضافة طبقة (Layer) واحدة على الأقل إلى هذا المشهد لاحتواء جميع عناصر اللعبة.
1. إعداد المشروع والواجهة الأساسية
أ. تهيئة المشروع (Project Initialization)
- إنشاء المشروع: استخدم أداة سطر الأوامر الخاصة بإطار Cocos2d
(مثل أمر cocos new في Cocos2d-x) لإنشاء هيكل المشروع الأساسي.
- نقطة الدخول (Entry Point): يتم تشغيل اللعبة من خلال دالة رئيسية تقوم
بإنشاء مثيل (Instance) للمشهد الأولي وتشغيله.
ب. تصميم الواجهة الهرمية (Scene & Layer)
- المشهد (Scene): هو الحاوية الرئيسية. أنشئ مشهداً لكل شاشة رئيسية في لعبتك
مثل: مشهد القائمة الرئيسية، مشهد اللعب، مشهد نهاية اللعبة).
- الطبقة (Layer): هي الحاوية لمنطق اللعبة وعناصرها. يتم إضافة الطبقات إلى المشهد.
يمكنك استخدام طبقات متعددة لتنظيم عناصر واجهة المستخدم (Layer UI) بشكل
منفصل عن عناصر اللعب (Layer Game World).
- الكائنات المتحركة (Sprites): هي العناصر المرئية داخل الطبقة (مثل اللاعب، الأعداء، الخلفية المتحركة).
2. منطق اللعبة والتفاعل (Sprites & Actions)
أ. إضافة الكائنات (Sprites)
- الإضافة: يتم تحميل صور الكائنات وتعيين موقعها (Position) داخل الطبقة باستخدام الإحداثيات (x, y).
ب. استخدام الحركات (Actions)
- الحركات المسبقة: يستخدم Cocos2d نظام الحركات (Actions) لتحريك الكائنات وتغيير
خصائصها (مثل: MoveTo لتحريك الكائن، RotateBy للتدوير، ScaleTo لتغيير الحجم).
- التسلسل: يمكنك دمج الحركات في تسلسل (Sequence) أو حركات متزامنة (Spawn) لتنفيذ مهام معقدة.
ج. حلقة اللعب (Game Loop) ومعالجة الإدخال
- دالة التحديث (update): يتم استدعاء دالة التحديث في كل إطار (Frame) من إطارات اللعبة.
يتم استخدامها لتحديث منطق اللعبة (مثل حركة الأعداء، فحص التصادم، تحديث النقاط).
- معالجة اللمس/الماوس (Touch/Mouse Events): يجب تفعيل استقبال أحداث
الإدخال في الطبقة لمعرفة تفاعل اللاعب مع الشاشة أو الأزرار.
3. حفظ إعدادات اللعبة (Game Settings)
لحفظ الإعدادات البسيطة مثل تفعيل/تعطيل الصوت أو الموسيقى، يتم استخدام آلية التخزين
البسيطة المدمجة في Cocos2d.
* استخدام فئة UserDefault
تُستخدم UserDefault لحفظ البيانات غير المعقدة، وهي تعمل عن طريق
تخزين أزواج من المفاتيح والقيم (Key-Value Pairs) على جهاز المستخدم
(ما يعادل ملفات Plist على iOS أو SharedPreferences على Android).
* حفظ القيمة :
UserDefault::getInstance()->setBoolForKey("SoundOn", true);
لـ حفظ قيمة منطقية (Boolean) لتفعيل الصوت.
* قراءة القيمة :
bool isSoundOn = UserDefault::getInstance()->getBoolForKey("SoundOn");
لـ قراءة حالة الصوت عند بدء تشغيل اللعبة.
4. حفظ المراحل والنقاط (Game Progress & Score Persistence)
عندما يتعلق الأمر بحفظ النقاط المرتفعة (High Score) والتقدم في المراحل:
أ. حفظ أعلى النقاط
* المنطق : قبل حفظ النتيجة الجديدة، يجب قراءة النتيجة المخزنة مسبقاً في UserDefault.
إذا كانت النتيجة الحالية أعلى، يتم تحديث القيمة المخزنة.
* مثال (Cocos2d-x) :
UserDefault::getInstance()->setIntegerForKey("HighScore", currentScore);
ب. حفظ تقدم المراحل
* المنطق : لحفظ المرحلة الأخيرة التي وصل إليها اللاعب (مثلاً: المرحلة 5)،
يتم تخزين رقم صحيح (Integer) يمثل تلك المرحلة.
* مثال:
UserDefault::getInstance()->setIntegerForKey("LastLevel", levelNumber);
ج. حفظ البيانات المعقدة (للمشاريع الكبيرة)
إذا كانت اللعبة تتطلب حفظ بيانات معقدة (مثل مخزون اللاعب، حالة العناصر، تخصيص الشخصية)،
يصبح التخزين في ملف خارجي (مثل ملف JSON أو XML) هو الخيار الأفضل.
- إنشاء بنية بيانات: قم بجمع البيانات في مصفوفة (Array) أو كائن (Object).
- تحويل إلى JSON/XML: استخدم مكتبة مساعدة لتحويل البنية إلى نص (Serialization).
- الكتابة إلى القرص: كتابة النص المشفر إلى مسار يمكن الوصول إليه محلياً.
الخاتمة
يوفر إطار عمل Cocos2d منهجية واضحة ومقسمة لتطوير الألعاب:
تبدأ المشهد بالبناء الهرمي (Scene, Layer, Sprite)، ثم يركز على الحركة
(Actions) والتحديث (update). أما بالنسبة لحفظ البيانات واستمرارية اللعبة،
فتُعد فئة UserDefault هي البوابة السريعة والفعالة لتخزين كل من إعدادات اللعبة البسيطة وتقدم اللاعب.