العودة
كيف تدخل أي مكتبة C++ إلى مشروع Godot
SiTech AI Team2 წთ. საკითხავი

كيف تدخل أي مكتبة C++ إلى مشروع Godot

يشرح دليل منشور على مدونة Conan كيف تدخل أي مكتبة C/C++ إلى مشروع Godot عبر GDExtension وgodot-cpp 10. وفي المثال تدير مكتبة ECS المسماة flecs عدد 100 000 جسيم في مشهد واحد.

Godot هو محرك ألعاب مجاني ومفتوح المصدر برخصة MIT، وتُكتب معظم المشاريع بلغة GDScript. عاجلاً أم آجلاً تصبح هناك حاجة إلى وظائف موجودة مسبقًا على شكل مكتبة C أو C++. لا تستطيع GDScript استدعاء كود native، وGodot يُدخله عبر GDExtension، بينما godot-cpp، وهي C++ bindings الرسمية، تمثّل هذا الكود كأصناف محرك عادية.

يشرح دليل مدونة Conan هذا المسار: أصبح godot-cpp 10 الآن في ConanCenter، وفي المثال تدير مكتبة ECS المسماة flecs عدد 100 000 جسيم في المشهد.

كيف يتوسع Godot بكود C++

يتكوّن مشروع Godot من scene وnode trees، وتُضاف السلوكيات عبر script مرتبط بـ node. يُضاف كود C++ بطريقتين: engine module يُترجم داخل المحرك، لكنه يتطلب بناء Godot خاصًا بكل المنصات، أما GDExtension فيحمّل shared library في Godot الرسمي أثناء runtime ويتفاعل عبر واجهة C مستقرة.

Godot-ის Create New Node დიალოგი, სადაც Swarm კლასი Node2D-ის ქვეშ ჩანს

البناء، الجزء الصعب

يغلّف godot-cpp واجهة C verbose بواجهة C++ API. منذ الإصدار 10، يعمل إصدار واحد مع كل إصدارات Godot من 4.3 فما فوق، ويُختار الإصدار عبر خيار api_version، بينما تُترجم الإضافة إلى أحد ثلاثة target. تقترح الوثائق إضافة godot-cpp كـ git submodule، لكن حينها كل مشروع يبني المكتبات بنفسه لكل منصة.

Conan يتولى التبعيات

في ConanCenter تحوّل وصفة godot-cpp هذه bindings إلى حزمة عادية: api_version (من 4.3 إلى 4.7، الافتراضي 4.7) وtarget هما خيارا Conan. تُبنى كل تركيبة مرة واحدة ثم تخدم جميع المشاريع. يوجد في ConanCenter أكثر من 1 900 مكتبة، وConan يبنيها جميعًا بالطريقة نفسها.

100 000 جسيم باستخدام flecs

في المثال يسجّل GDExtension عقدة Swarm جديدة تدير 100 000 جسيم على flecs: تهرب من الفأرة وترتد عن الحواف. في ECS يكون entity مجرد id، وcomponent بيانات مرتبطة به، وsystem دالة تمرّ على كل entity مناسب. تُخزَّن component من النوع نفسه معًا في الذاكرة، لذلك يكون التنقل بين أعداد كبيرة من entity سريعًا.

Godot-ის editor-ი Swarm node-ისა და Count, Flee Radius თვისებებით

في كل frame يمرّر _process() موضع الفأرة إلى flecs، ويشغّل system عبر world.progress()، وينسخ المواضع إلى buffer الخاص بـ MultiMesh: يرسم MultiMesh نسخًا كثيرة من mesh واحد في draw call واحد، لأن node منفصلًا لـ 100 000 جسيم ثقيل جدًا. تُسجّل الصنف عبر GDREGISTER_RUNTIME_CLASS، أي أنه في editor مجرد placeholder.

يتم البناء بأمر واحد: conan build . --build=missing. يبحث Conan عن godot-cpp وflecs، وينزّل binary جاهزة من ConanCenter، ويبني الإضافة. يحتاج godot-cpp إلى C++17، لذلك يُضاف الأمر -s compiler.cppstd=17 إلى profile القديم.

SSiTech

SiTech — تطوير ويب مدعوم بالذكاء الاصطناعي

نبني مواقع سريعة وعصرية وندمج الذكاء الاصطناعي في سير عمل الشركات. لديك مشروع أو سؤال؟ يسعدنا مساعدتك.