متشعب من إطار عمل لعبة raylib الرائع: https://www.raylib.com/
إشعار: لا يزال Rayfork قيد التطوير المبكر جدًا ولا يُنصح باستخدامه بشكل احترافي في الوقت الحالي.
يحتوي rayfork على ملف .c واحد فقط ويعتمد فقط على libc، مما يعني أنه يمكن تجميعه بسهولة كمكتبة من سطر الأوامر.
# -c compiles the code as a library
# -EHsc disables exceptions on msvc
gcc -c rayfork.c
clang -c rayfork.c
cl -c -EHsc rayfork.c
لا يوفر Rayfork طبقة النظام الأساسي، مما يعني أنه لن يقوم بإنشاء نافذة أو تحميل OpenGL أو التقاط المدخلات لك.
هذا حسب التصميم، بحيث يمكنك بسهولة استخدام Rayfork على منصات متعددة (بما في ذلك وحدات التحكم في الألعاب) باستخدام الطريقة التي تناسبك بشكل أفضل. توجد قوالب لاستخدام rayfork مع طبقات GLFW وSDL وsokol-app وطبقات النظام الأساسي المخصصة.
يحتوي العارض حاليًا على واجهات خلفية OpenGL33 وOpenGL-ES3 (مع المزيد ليتم إضافتها) والتي يتم تنفيذها بطريقة محمولة تسمح بتجميع rayfork على أي نظام أساسي، مع الاعتماد الوحيد على libc. يتم تمرير procs OpenGL بشكل صريح إلى rayfork وهناك ماكرو بسيط للمساعدة في ذلك.
ولهذا السبب، يمكنك بسهولة تجميع Rayfork لأي نظام أساسي سواء كان جهاز كمبيوتر أو هاتفًا محمولًا أو وحدات تحكم.
غالبًا ما تكون الوظائف التي تقوم بعملية الإدخال/الإخراج اختيارية وتطلب بشكل صريح عمليات رد اتصال الإدخال/الإخراج. يتم توفير غلاف بسيط لوظائف libc IO كـ rf_default_io
.
الوظائف التي يتم تخصيصها بشكل صريح تطلب مُخصصًا وأحيانًا أيضًا مُخصص ذاكرة مؤقت (الذاكرة التي يتم تحريرها داخل الوظيفة). يتم توفير غلاف بسيط لـ malloc/free الخاص بـ libc كـ rf_default_allocator
.
يتم أيضًا استخدام جميع التبعيات مع وضع المخصصات المخصصة في الاعتبار، ولن تقوم المكتبة أبدًا بالتخصيص دون علمك.
تحتوي كل وظيفة تتطلب مُخصصًا أو رد اتصال io على إصدار _ez
الذي يغلف الوظيفة الأصلية ويستدعيها باستخدام rf_default_allocator
و/أو rf_default_io
، وهذا مفيد لاختبار التعليمات البرمجية بسرعة.
المكتبة عبارة عن ملف رأس ومصدر واحد فقط ويمكن تخصيصها في وقت الترجمة باستخدام تعريفات المعالج المسبق. ليست هناك حاجة إلى علامات ترجمة إضافية، اعتمادًا على الواجهة الخلفية للرسومات التي قد تحتاج إلى ربطها بمكتبات معينة.
تم إنشاء raylib في البداية لأغراض تعليمية ونضجت بمرور الوقت لتصبح مكتبة ألعاب مفيدة جدًا، تشبه مكتبة XNA.
ومع ذلك، نظرًا لطبيعته، فإن العديد من خيارات التصميم في raylib تجعل من الصعب استخدامه لمطوري الألعاب المحترفين:
من الصعب استخدام طبقة نظام أساسي مخصصة (على سبيل المثال: الاستخدام مع طبقة نظام أساسي مخصصة على Android مع Android Studio)
من الصعب النقل على منصات أخرى (على سبيل المثال: iOS ووحدات التحكم)
القليل من التحكم في تخصيصات الذاكرة وio.
تم تصميم rayfork لمعالجة هذه المشكلات وتسهيل تطوير الألعاب الاحترافية باستخدام واجهة برمجة التطبيقات من raylib.
لقد بدأت هذا المشروع لأنني أحب raylib وC99 وأردت حقًا تطوير لعبتي باستخدامهما.
ومع ذلك، لا تتبع العديد من المكتبات المبادئ التي أبحث عنها في المكتبة (راجع هذه المقالة) مما يجعل استخدامها في الألعاب أمرًا صعبًا/مزعجًا، ولهذا السبب أرغب في إنشاء مكتبة يمكن للمطورين المستقلين استخدامها بثقة وسهولة لتطوير مشاريعهم دون التضحية بالتحكم أو قابلية النقل أو الجودة.
إذا كنت تريد أن تكون قادرًا على تطوير الألعاب بسهولة مع المكتبات التي تحترم المبادئ المذكورة أعلاه، فيرجى التفكير في المساهمة في rayfork.
يمكنك التحقق من علامة تبويب المشكلات والعثور على الكثير من الأشياء التي يمكنك القيام بها للمساهمة.
أنا أيضًا أبحث عن مساعدة في تطوير أشياء خارج نطاق خبرتي:
تواصل معي على خادم raylib discord في قناة #rayfork، أنا @BananyaDev#0001، أو على تويتر @SasLuca.
احتفظ باصطلاح التسمية لحالة الثعبان، واستخدم rf_function_name
لوظائف الواجهة و_ _rf_function_name
للوظائف الخاصة.
قم ببادئة كافة الوظائف بـ rf_public
أو RF_INTERNAL
لا تقم بتضمين رؤوس إضافية في الواجهة، بل اعمل على تقليل التضمينات بشكل عام.
استخدم #pragma region #pragma endregion
لطي مناطق التعليمات البرمجية وفكر في استخدام محرر يدعم طي تلك المناطق للحصول على فهم أسهل للتعليمات البرمجية.
حاول تطبيق النصائح الواردة في هذه المقالة بشكل عام. بعض النصائح الأكثر أهمية ستكون: