eepp عبارة عن إطار عمل لتطوير الألعاب والتطبيقات مفتوح المصدر ومتعدد المنصات يركز بشكل كبير على تطوير واجهات المستخدم الرسومية الغنية.
الدعم الرسمي لأنظمة التشغيل Linux وWindows وmacOS وAndroid وiOS.
يتم التصدير إلى HTML5 باستخدام emscripten مع بعض القيود البسيطة.
يعمل أيضًا على BSD وHaiku.
عناصر واجهة المستخدم الأساسية لإدارة كائنات التطبيق/اللعبة كعقد، مع جميع أحداث تفاعل الإدخال الأساسية (النقرات، الضغط على المفاتيح، تمرير الماوس، التركيز، وما إلى ذلك).
نظام واجهة مستخدم كامل الميزات، ودعم الرسوم المتحركة، والقياس، والتدوير، والقص، والأحداث، والرسائل، وما إلى ذلك.
دعم المواضيع والجلود/الزخارف.
دعم كثافة البكسل (قياس عناصر واجهة المستخدم المحددة بواسطة كثافة البكسل في الشاشة).
يتم تنفيذ جميع الأدوات الأساسية (الزر، مربع النص، مربع التحرير والسرد، مربع الإدخال، القائمة، مربع القائمة، أشرطة التمرير، وما إلى ذلك).
رسم دعم إبطال. يمكن استخدامه لإنشاء تطبيقات حقيقية، مع استخدام منخفض للموارد (يتم إعادة الرسم فقط عند الحاجة).
نظام تخطيط مشابه لتخطيطات Android (LinearLayout، RelativeLayout، GridLayout).
ميزات متقدمة مثل تحديد النص والنسخ واللصق وربط المفاتيح.
تحميل وتصميم التخطيطات من ملفات XML
التصميم باستخدام أوراق الأنماط المتتالية
العارضون لـ OpenGL 2 (خط الأنابيب الثابت)، وOpenGL 3 (خط الأنابيب القابل للبرمجة)، وOpenGL ES 2، وOpenGL ES 1، وملف تعريف OpenGL الأساسي.
عارض الدُفعات (يتم تجميع جميع العروض تلقائيًا بواسطة المحرك).
دعم الخطوط (خطوط TrueType وBMFont وXNA).
دعم الإطار العازلة.
دعم التظليل (مع تظليل خط الأنابيب الثابت التلقائي لمحول قابل للبرمجة).
دعم كائن Vertex Buffer.
نظام الجسيمات.
وحدة تحكم قابلة للتمديد.
العفاريت المتحركة.
دعم أطلس النسيج (الإنشاء التلقائي لأطلس النسيج وتحديثه، بما في ذلك المحرر).
أقنعة القطع (الاستنسل والمقص والطائرات)
دعم تسعة تصحيحات للصور النقطية يمكن تغيير حجمها.
البدائيات الرسومية.
يتم دعم العديد من تنسيقات الصور (بما في ذلك SVG النقطية)، ودعم الأنسجة المضغوطة (التحميل المباشر إلى وحدة معالجة الرسومات عندما يكون ذلك ممكنًا).
الوحدة المستندة إلى الواجهة الخلفية، وهذا يعني أنه يمكنك بسهولة إنشاء واجهة خلفية للتعامل مع النافذة/الإدخال.
يدعم حاليًا SDL 2 كواجهة خلفية.
دعم الحافظة.
مؤشرات الأجهزة.
مدير العرض
دعم عصا التحكم.
يوفر جميع المواد الأساسية للدعم الكامل متعدد الخيوط للمكتبة، ودعم تنسيقات الملفات للتعبئة، والساعات، ومدير الموارد، والمترجم، وغير ذلك الكثير.
فئة نظام الملفات الظاهري (موفري الأصول المجردة في نظام ملفات افتراضي واحد، وتجريد الملفات المضغوطة ونظام الملفات المحلي في نظام واحد للتحميل الشفاف للموارد، على غرار PhysicsFS).
مدير الذاكرة للتخصيص. يُستخدم بشكل افتراضي في وضع التصحيح لتتبع تسرب الذاكرة.
UTF8، UTF-16، UTF-32، Ansi، دعم Wide Char.
فئة سلسلة تستخدم أحرف UTF-32 داخليًا.
تصحيح وحدات الماكرو
وظائف وقوالب للأغراض العامة (المتجه، الرباعي، المضلع، إلخ).
دروس الاستيفاء مع التخفيف.
بعض الأدوات المساعدة البسيطة للرياضيات، تتضمن تنفيذ مولد الأرقام العشوائية Mersenne Twister وضوضاء بيرلين والمزيد.
طلبات الويب مع عميل HTTP، مع دعم TLS (المقدمة من mbedtls أو opensl).
طلبات HTTP غير المتزامنة.
عمليات نقل الملفات باستخدام عميل FTP وعميل FTPS (FTP مع TLS صريح).
مآخذ TCP و UDP.
دعم ترميز محتوى HTTP وترميز النقل.
دعم وكيل HTTP.
دعم الاستجابة المضغوطة لـ HTTP.
وأيضًا دعم استئناف/متابعة تنزيل HTTP وعمليات إعادة التوجيه التلقائية.
نظام قائم على العقدة لإدارة المشاهد بسهولة.
التحكم الكامل في أحداث العقدة (النقرات، تمرير الماوس، التركيز، وما إلى ذلك).
نظام الحدث.
نظام رسائل العقدة.
إجراءات قابلة للبرمجة للعقد (التلاشي، التدوير، النقل، القياس، إلخ).
خرائط مبلطة مع أضواء ديناميكية برمجية.
محرر خرائط كامل المواصفات.
محرر واجهة مستخدم بسيط جدًا. قم بتحميل التخطيطات من ملف XML وشاهد التغييرات التي يتم إجراؤها في الوقت الفعلي.
محرر أطلس الملمس. أداة بسيطة للغاية تسمح للمطور بإنشاء أطالس النسيج وتحريرها.
محرر الخرائط: محرر خرائط متقدم وبسيط لمحرك اللعبة. إنها تفتقر إلى العديد من الميزات حيث لم يكن لدي الوقت الكافي للعمل عليها، ومن المحتمل أن تموت هذه الأداة تحديدًا لصالح دعم خرائط TMX في المستقبل القريب (لكنني لست من محبي خرائط TMX، لذا لا يوجد قرار بشأنها) اللحظة).
التوثيق موجود هنا . وأنا أعمل حاليا على تحسينه. تم توثيق حوالي 50% من المشروع حاليًا، لذا لا يزال بحاجة إلى الكثير من العمل. يرجى التحقق من أمثلة التعليمات البرمجية الموجودة في src/examples
ويمكنك أيضًا التحقق من الاختبار ( src/test
) والأدوات ( src/tools
).
أبذل جهودي لتحسين الوثائق الخاصة بوحدة واجهة المستخدم نظرًا لأنها حاليًا الوحدة الأكثر أهمية وتعقيدًا ولكنها تفتقر إلى الوثائق المناسبة. إذا كان لديك أي سؤال يمكنك الاتصال بي في أي وقت.
يستخدم المستودع وحدات git الفرعية، لذا ستحتاج إلى استنساخ المستودع ووحداته الفرعية، ومن أجل تحقيق ذلك بسهولة، يمكنك ببساطة الاستنساخ باستخدام:
git clone --recurse-submodules https://github.com/SpartanJ/eepp.git
ecode هو محرر أكواد مستوحى من برنامج Lite. إنه يستخدم أحدث سمة CSS خالصة استنادًا إلى سمة Plasma dark الافتراضية: Breeze Dark.
محرر يعرض التغييرات في الوقت الفعلي على أي تخطيط وCSS للمساعدة في تسريع تطوير واجهات المستخدم. تعرض لقطة الشاشة بعض الأدوات الافتراضية المتوفرة في eepp.
أداة صغيرة، تستخدم لإنشاء وتحرير أطالس النسيج.
محرر خرائط ثنائي الأبعاد يستخدم السمة الافتراضية (باستخدام أطلس نسيج واحد مع صور مكونة من 9 تصحيحات).
يجب أن يبدو مألوفًا حقًا لأي مطور Android. هذه نافذة تحتوي على الأدوات الأساسية في عرض التخطيط الخطي العمودي.
< window layout_width = " 300dp " layout_height = " 300dp " window-flags = " default|maximize|shadow " >
< LinearLayout id = " testlayout " orientation = " vertical " layout_width = " match_parent " layout_height = " match_parent " layout_margin = " 8dp " >
< TextView text = " Hello World! " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " backgroundColor = " black " />
< PushButton text = " OK! " textSize = " 16dp " icon = " ok " gravity = " center " layout_gravity = " center_horizontal " layout_width = " match_parent " layout_height = " wrap_content " />
< Image src = " thecircle " layout_width = " match_parent " layout_height = " 32dp " flags = " clip " />
< Sprite src = " gn " />
< TextInput text = " test " layout_width = " match_parent " layout_height = " wrap_content " />
< DropDownList layout_width = " match_parent " layout_height = " wrap_content " selectedIndex = " 0 " >
< item >Test Item</ item >
< item >@string/test_item</ item >
</ DropDownList >
< ListBox layout_width = " match_parent " layout_height = " match_parent " layout_weight = " 1 " >
< item >Hello!</ item >
< item >World!</ item >
</ ListBox >
</ LinearLayout >
</ window >
يمكن العثور على مقدمة واجهة المستخدم هنا .
كيف يبدو الأمر مع الكود الحقيقي؟
UITextView::New ()->setText( " Text on test 1 " )
->setCharacterSize( 12 )
->setLayoutMargin( Rect ( 10 , 10 , 10 , 10 ) )
->setLayoutSizePolicy( SizePolicy::MatchParent, SizePolicy::WrapContent )
->setParent( layout );
يمكن تنفيذ تصميم العناصر من خلال تطبيق مخصص لأوراق الأنماط المتتالية، وتتوفر قواعد CSS2 الأكثر شيوعًا، بالإضافة إلى العديد من قواعد CSS3 (بعض الأمثلة: الرسوم المتحركة، والانتقالات، والخصائص المخصصة، واستعلامات الوسائط، @font-face في القاعدة، :عنصر الجذر) . فيما يلي مثال صغير لكيفية ظهور CSS:
@font-face {
font-family : "OpenSans Regular" ;
src : url ( "https://raw.githubusercontent.com/SpartanJ/eepp/develop/bin/assets/fonts/OpenSans-Regular.ttf" );
}
@import url ( "assets/layouts/imported.css" ) screen and ( min-width : 800 px );
: root {
--font-color : black;
--background-input-color : rgba ( 255 , 255 , 255 , 0.7 );
--border-color : black;
--border-width : 1 dp ;
}
. screen TextView {
color : var ( --font-color );
}
. form {
background-image : @drawable /back;
background-repeat : no-repeat;
background-size : cover;
}
. form . form_inputs {
background-color : var ( --non-existent , var ( --background-input-color ));
margin-left : 100 dp ;
margin-right : 100 dp ;
padding-top : 72 dp ;
padding-left : 57 dp ;
padding-right : 57 dp ;
padding-bottom : 115 dp ;
}
. screen TextView . input ,
. screen TextInput . input {
font-family : AkzidenzGroteskBQ-Cnd;
layout-width : match_parent;
layout-height : 80 dp ;
border-color : var ( --border-color );
border-width : var ( --border-width );
color : var ( --font-color );
padding-left : 40 dp ;
padding-right : 40 dp ;
margin-bottom : 32 dp ;
skin : none;
hint-font-family : AkzidenzGroteskBQ-Cnd;
hint-font-size : 46 dp ;
hint-color : # 818285 ;
background-color : # FFFFFF00 ;
transition : all 0.125 s ;
}
. screen TextInput . input : focus {
background-color : # FFFFFF66 ;
border-color : # 796500 ;
}
. screen TextInput . input : hover {
background-color : # FFFFFF66 ;
}
@media screen and ( max-width : 1024 px ) {
. form . form_inputs {
background-color : red;
}
}
يمكن العثور على مواصفات CSS الكاملة في المستندات: هنا.
يمكنك أيضًا التحقق من شكل سمة CSS النقية في eepp: هنا.
نظرًا لأن eepp يدعم emscripten، يمكنك إلقاء نظرة سريعة على بعض الأمثلة والعروض التوضيحية والأدوات التي توفرها المكتبة حاليًا. يرجى العلم أنك ستجد بعض الاختلافات بناءً على القيود الموجودة في emscripten في الوقت الحالي (لا يوجد إمكانية الوصول إلى نظام الملفات، ولا توجد مؤشرات مخصصة، وما إلى ذلك) وأيضًا لم يتم تحسين العروض التوضيحية من حيث الحجم وهي أكبر مما ينبغي يكون. ملحوظة: يرجى استخدام متصفح حديث يدعم WebGL وWASM بشكل جيد (Chrome/ium 70+ أو Firefox 80+).
كود - محرر الكود
محرر واجهة المستخدم
واجهة المستخدم مرحباً بالعالم
محرر أطلس الملمس
محرر الخرائط
مثال الخطوط
عرض وحدة الفيزياء
مثال العفاريت
اختبار كامل
تُعرف 7GUIs باسم "معيار برمجة واجهة المستخدم الرسومية" الذي يتم استخدامه لمقارنة مكتبات واجهة المستخدم الرسومية المختلفة واستكشاف كل نهج مكتبة لبرمجة واجهة المستخدم الرسومية. تم تنفيذ جميع المهام السبعة المقترحة في 7GUIs لـ eepp. تمثل المهام تمثيلاً جيدًا جدًا لما يمكن تحقيقه باستخدام واجهة المستخدم الرسومية لـ eepp وهي أيضًا مفيدة جدًا لتوضيح كيفية تنفيذ المهام المختلفة مع المكتبة.
تتكون واجهات المستخدم الرسومية السبعة من المهام التالية:
العداد: تنفيذ العرض التوضيحي والتعليمات البرمجية.
محول درجة الحرارة: تنفيذ العرض التوضيحي والتعليمات البرمجية.
Flight Booker: تنفيذ العرض التوضيحي والتعليمات البرمجية.
الموقت: تنفيذ العرض التوضيحي والتعليمات البرمجية.
CRUD: تنفيذ العرض التوضيحي والتعليمات البرمجية.
درج الدائرة: تنفيذ العرض التوضيحي والتعليمات البرمجية.
الخلايا: تنفيذ العرض التوضيحي والتعليمات البرمجية.
المكتبة لديها تبعية خارجية واحدة فقط. ستحتاج فقط إلى مكتبة SDL2 مع تثبيت الرؤوس. هناك حاجة أيضًا إلى premake5 أو premake4 لإنشاء ملفات Makefiles أو ملفات المشروع لإنشاء المكتبة. سأفترض أنك تعرف ما تفعله وتتخطى الأساسيات.
ملاحظة: يستخدم eepp mojoAL افتراضيًا كبديل لـ OpenAL. يتوفر OpenAL اختياريًا كخلفية صوتية. إذا كنت تريد استخدامه، فلديك البديل لتمكينه. لتمكينه وتعطيل بديل mojoAL المنسدل، تحتاج إلى إضافة المعلمة --without-mojoal
إلى أي مكالمة premake
(على سبيل المثال: premake5 --without-mojoal gmake2
).
في نظام Ubuntu سيكون الأمر كالتالي (ستحتاج أيضًا إلى gcc ولكن سيتم تثبيته على أي حال):
sudo apt-get install premake5 libsdl2-2.0-0 libsdl2-dev libopenal1 libopenal-dev
استنساخ المستودع وتشغيله على الدليل الجذر للمستودع:
premake5 gmake2
أو إذا كان لديك premake4 مثبتًا، فيمكنك تشغيل:
premake4 gmake
ثم قم فقط ببناء المكتبة:
make -C make/linux
هذا كل شيء. سيؤدي ذلك إلى بناء المشروع بأكمله.
لديك خياران: البناء باستخدام Visual Studio أو باستخدام MinGW. لتتمكن من إنشاء المشروع باستخدام أي من هذه الخيارات أولاً، ستحتاج إلى إنشاء ملفات المشروع باستخدام premake4 أو premake5. ستحتاج بعد ذلك إلى إضافة الملف الثنائي إلى أي من المسارات القابلة للتنفيذ المحددة في PATH
(أو أضف واحدًا أو استخدمه من مسار محلي). قم بتنزيل ملفات Visual Studio أو MinGW حسب احتياجاتك.
سوف تحتاج إلى استخدام premake5 وتشغيل:
premake5.exe --windows-vc-build vs2022
ثم يجب العثور على ملفات المشروع في make/windows/
. الحل الكامل وجميع المشروع سيكون متاحا. بعد تثبيت كل شيء، ستتمكن من إنشاء حل Visual Studio مثل أي مشروع آخر.
سيؤدي استخدام وسيطة سطر commnad --windows-vc-build
إلى تنزيل تبعية SDL2 تلقائيًا وإضافة المسارات إلى عملية الإنشاء للارتباط بها دون الحاجة إلى تنزيل أي تبعية خارجية يدويًا.
ثم ما عليك سوى إنشاء الحل في Visual Studio أو تشغيل MSBuild
يدويًا في وحدة التحكم:
"%MSBUILD_PATH%MSBuild.exe" .makewindowseepp.sln -m
حيث %MSBUILD_PATH%
هو مسار MSBuild.exe Visual Studio، على سبيل المثال بالنسبة لـ VS2022 Community Edition، يكون المسار عادةً:
C:Program FilesMicrosoft Visual Studio2022CommunityMSBuildCurrentBin
يتم إنتاج واختبار إصدارات Windows MinGW باستخدام توزيعة w64devkit. MSYS غير مدعوم رسميًا حاليًا نظرًا لوجود بعض المشكلات في عملية الإنشاء (ولكن من الممكن الإنشاء باستخدام بعض الخطوات الإضافية).
إذا كنت تستخدم w64devkit فسيتعين عليك تنزيله واستخراجه، وسنفترض أنه تم استخراجه في C:w64devkit
.
قم بتنفيذ C:w64devkitw64devkit.exe
كمسؤول ( right click
-> Run as administrator
).
ثم انتقل إلى دليل مستودع eepp
المستنسخ وقم بتشغيل:
premake5.exe --windows-mingw-build gmake2
--windows-mingw-build
سيقوم تلقائيًا بتنزيل التبعيات الخارجية (SDL2) وربطها.
ثم قم فقط ببناء المشروع الموجود في make/windows/
باستخدام mingw32-make.exe
أو أي ما يعادله:
mingw32-make.exe -C make\windows config=release_x86_64
لإنشاء تشغيل بناء التصحيح:
mingw32-make.exe -C make\windows config=debug_x86_64
ثم تأكد من نسخ ملف SDL2.dll
الموجود في src/thirdparty/SDL2-2.XX.X/x86_64-w64-mingw32/bin/SDL2.dll
إلى bin
. إذا لم يتم نسخ eepp.dll
(أو eepp-debug.dll
) تلقائيًا لسبب ما، فيمكنك نسخها من libs/windows/x86_64/
إلى bin
.
ستحتاج إلى ثنائيات البناء المسبق ومكتبات التطوير الخاصة بـ SDL2، حيث يتم تضمين OpenAL مع نظام التشغيل. قم بتثبيت إطار عمل SDL2 وستتمكن من بناء المشروع.
لديك خياران لبناء المشروع: باستخدام XCode أو باستخدام Makefiles . للإنشاء باستخدام أي من كلا الخيارين أولاً، ستحتاج أيضًا إلى إنشاء ملفات المشروع باستخدام premake4 أو premake5.
إنشاء المشروع:
premake5 --use-frameworks gmake2
وبناء عليه:
make -C make/macosx
يمكنك استخدام البرنامج النصي projects/osx/make.sh
، الذي يقوم بإنشاء ملفات Makefiles وبناء المشروع.
يجري:
premake5 --use-frameworks xcode4
وافتح مشروع XCode الذي تم إنشاؤه في make/macosx/
أو ببساطة قم بالإنشاء من سطر الأوامر باستخدام:
xcodebuild -project make/macosx/project-name.xcodeproj
يوجد مشروع مهد في projects/android-project/
. سيقوم ببناء المكتبة بكل التبعيات المضمنة. استخدم المشروع النموذجي كقاعدة لمشروعك. لاحظ وجود ملف مشروع eepp.mk
الذي يبني المكتبة. يمكن استخدام هذا الملف في مشاريعك.
يوفر المشروع ملفين لبناء المكتبة والعروض التوضيحية. يمكنك استخدام أي منها حسب احتياجاتك. الملفات موجودة في projects/ios
:
يمكن استخدام هذا البرنامج النصي لإنشاء مشاريع xcode وحل جميع المشاريع المضمنة في eepp (العروض التوضيحية، والأدوات، وlib المشترك، وlib الثابت، وما إلى ذلك). سيقوم أيضًا بتنزيل وإنشاء مكتبة SDL2 الثابتة حتى يتمكن من الرجوع إلى المكتبة في المشروع. بعد بناء المشاريع للأسف، ستحتاج إلى إجراء بعض التغييرات الطفيفة على أي/جميع المشاريع التي لا ترغب في بنائها أو اختبارها، نظرًا لأن المشروع الذي تم إنشاؤه يفتقر إلى بعض التكوينات الثانوية. بعد تشغيل هذا البرنامج النصي، ستحتاج إلى فتح الحل الموجود في make/ios/eepp.xcworkspace
. لإنشاء المكتبات الثابتة لن تجد أي مشكلة (سيعمل ذلك خارج الصندوق). لكن لاختبار بعض الأمثلة يلزم:
حدد (اضغط على اسم المشروع) المشروع الذي تريد اختباره، على سبيل المثال eepp-empty-window
. ستظهر لك عدة علامات تبويب/خيارات، وانتقل إلى إعدادات البناء ، وحدد موقع ملف الخيار Info.plist ، وانقر نقرًا مزدوجًا للتحرير والكتابة: Info.plist
. سيشير هذا إلى قراءة هذا الملف الموجود في نفس دليل المشروع. انتقل إلى علامة التبويب عام وأكمل معرف الحزمة باسم معرف حزمة التطبيق التي سيتم إنشاؤها، في هذا المثال يمكنك استخدام شيء مثل: eepp-empty-window
. سيسمح لك ذلك ببناء المشروع وتشغيله.
لا يستخدم هذا العرض التوضيحي eepp-empty-window
أي أصول/موارد، ولكن ستحتاج العروض التوضيحية الأخرى إلى تحميل الأصول، ويجب إضافة هذه الأصول إلى المشروع حتى تكون متاحة لحزمة التطبيق. على سبيل المثال، سيتطلب منك مشروع eepp-ui-hello-world
إضافة مجلد assets
إلى المشروع. ما عليك القيام به هو: تحديد المشروع والانتقال إلى علامة التبويب "مراحل البناء" ، وفي "نسخ حزم الموارد" ، انقر فوق أيقونة علامة الجمع (+)، ثم انتقل إلى "إضافة أخرى"... وحدد موقع المجلد bin/assets/
وحدده و ينهي . ينبغي أن يكون كافيا.
يمكن استخدام هذا البرنامج النصي لإنشاء SDL2 وeepp كمكتبتين ثابتتين مع بنيات Arm64 وx86_64 (arm64 لأجهزة iPhone/iPad وx86_64 لأجهزة المحاكاة). لإنشاء إصدار، قم بتمرير config=release
كمعلمة للبرنامج النصي ( sh compile-all.sh config=release
). سيتم وضع الملفات المبنية في libs/ios/
، مثل libSDL2.a
و libeepp.a
(أو libeepp-debug.a
لبناء تصحيح الأخطاء). يمكن دمج هذين الملفين في مشروعك.
ستحتاج أولاً إلى تنزيل وتثبيت emscripten. ثم هناك برنامج نصي لبناء مشروع emscripten في projects/emscripten/make.sh
. قبل تشغيل هذا البرنامج النصي، تذكر ضبط بيئة emsdk، ويجب أن تكون شيئًا مثل: source /path/to/emsdk/emsdk_env.sh
. يجب أن يكون ذلك كافيًا في GNU/Linux أو macOS (اختبر هذا فقط على GNU/Linux).
توجد جميع الثنائيات في دليل bin
بعد بنائها. تتطلب الثنائيات ملفين: مكتبة eepp ومكتبة SDL2. ستكون مكتبة eepp موجودة في libs/{OS}/
. سيحاول البرنامج النصي للإنشاء ربط مكتبة eepp بـ bin
، وإذا فشل ذلك، فيجب نسخه أو ربطه يدويًا. فيما يتعلق بمكتبة SDL2، لا يتم توفيرها في المستودع، لذلك، لتشغيل العروض التوضيحية، ستحتاج إلى تنزيل إصدار نظام تشغيل مكتبة SDL2 الصحيح وبنيته.
المكتبة قيد التطوير منذ عدة سنوات، وقد عانت من العديد من التغييرات منذ بدايتها، وأنا أقوم بإجراء أي تغييرات أجدها ضرورية لتحسينها، لذا فإن واجهة برمجة التطبيقات (API) لا تزال غير مستقرة تمامًا (ولكنها قريبة من ذلك). يتم استخدامه في العديد من التطبيقات الموجهة للحملات الدعائية التي تم تطويرها في الغالب لأجهزة Android وأجهزة الكمبيوتر التي تعمل بنظام Windows.
أنا شخصيا لم يكن لدي الوقت الكافي لاستخدامها في تطوير لعبة معقدة مع المكتبة (العديد من المشاريع المحبطة)، لكنني صنعت العديد من الألعاب الموجهة لواجهة المستخدم للعملاء.
ينصب تركيز المشروع الحالي على وحدة واجهة المستخدم. وسأواصل العمل مع التركيز على هذا الأمر.
تتمثل الخطة في توفير مجموعة أدوات بديلة لواجهة المستخدم تم تسريعها بالكامل على غرار مجموعة أدوات Android ولكنها أبسط (كما هو الحال في سهولة الاستخدام) وموجهة أيضًا إلى تطبيقات سطح المكتب.
استندت وحدات الصوت والشبكة إلى الوحدات الموجودة في SFML مع العديد من الاختلافات المهمة المذكورة أعلاه.
أحب استخدام ما تم تنفيذه بشكل جيد ويناسب احتياجاتي، ولكن نظرًا لأن لدي آرائي الشخصية حول كيفية تنفيذ بعض الأشياء، فإنني أفضّل أخذ الكود، حتى أتمكن من التحكم الكامل فيه.
كما تم أخذ العديد من الأفكار من مشاريع أخرى. بعض ما يمكنني التفكير فيه هو: cocos2d-x و raylib و Android SDK و libGDX و Godot و XNA و LÖVE والعديد من المشاريع الأخرى.
إذا كان كل هذا يبدو مثيرًا للاهتمام بالنسبة لك لسبب مجنون، فاتصل بي وأخبرني إذا كان بإمكاني مساعدتك في الدخول إلى المكتبة، وربما يمكنك المساهمة فيها في المستقبل إذا كنت تريد ذلك. هذا المشروع يحتاج إلى مساهمين أكثر من أي شيء آخر.
الوضع الحالي للمكتبة لائق. من حيث الميزات، يجب أن تكون في وضع مماثل لمحركات الألعاب ثنائية الأبعاد الأكثر استخدامًا. لكن يفتقر بالطبع إلى الدعم + المجتمع الذي يمكنك الحصول عليه من Godot أو cocos2d-x على سبيل المثال لا الحصر.
الفكرة الرئيسية لهذه المكتبة هي التركيز على نهج عام أفضل لتطوير التطبيقات والألعاب المستندة إلى واجهة المستخدم بشكل كبير مقارنة بالخيارات الأخرى، مع كود وتنفيذ أكثر وضوحًا.
السبب الرئيسي وراء تطوير المكتبة هو المتعة وتعلم التقنيات الجديدة. أحب قضاء الوقت في العمل في المكتبة، لكنني أعلم أنه ربما لا يوجد سبب حقيقي لتطوير شيء مثل هذا مع العدد الهائل من البدائل المماثلة.
فيما يتعلق بجودة الكود: بدأ هذا المشروع منذ فترة طويلة جدًا وتعرض للعديد من التعديلات بمرور الوقت. لا يزال جزء كبير من قاعدة التعليمات البرمجية يستخدم ممارسات C++ القديمة (على سبيل المثال: المؤشرات الأولية، والتنفيذ الخاص للخيط، وكائن المزامنة، وما إلى ذلك). يمكن "تحديث" بعض هذه الأشياء، لكن بعضها الآخر لا معنى له أو قد يستغرق إصلاحها الكثير من الوقت لتبرير الجهد المبذول. أنا أعمل على "تحديث" بعض أجزاء الكود، وعادةً ما يبدو الكود الجديد أكثر حداثة.
استمر في تحسين نظام واجهة المستخدم، وإضافة عناصر واجهة مستخدم وتخطيطات جديدة وتحسين دعم CSS.
تبسيط وتحسين عناصر واجهة المستخدم لواجهة المستخدم/دعم السمات.
تحسين/إنشاء وثائق لوحدة واجهة المستخدم.
أضف المزيد من الأمثلة وبعض الأدوات.
قم بإضافة دعم البرمجة النصية، ولكن أولاً أرغب في تثبيت المكتبة، لكنني سأصل إلى هناك.
أضف دعمًا للرسوم المتحركة الهيكلية ثنائية الأبعاد (ربما لا يتطلب تنفيذ Spine2D الكثير من العمل).
من المحتمل أن أتوقف عن استخدام وحدة الخرائط، لأنني سأركز جهودي على نظام واجهة المستخدم.
شون باريت لـ stb_image وجميع مكتبات stb.
سام لاتينجا لطبقة DirectMedia البسيطة.
جوناثان دامر لمكتبة صور OpenGL البسيطة.
لوران جوميلا لصالح SFML
يوري كوبيتس لـ litehtml
مايكل RP Ragazzon لـ RmlUI
rxi لايت
أندرياس كلينج لنظام التشغيل SerenityOS
ريان سي جوردون عن mojoAL
ديفيد ريد لـ dr_libs
الأسد (Lieff) لـ minimp3 والمزيد
لويس فان وينكل لـ PlusCallback
ديتر بارون وتوماس كلاوسنر من موقع libzip
جان لوب جيلي ومارك أدلر عن زليب
ميلان إيكيتس ومارسيلو ماجالون لصالح GLEW
ميكو مونونين لـ nanosvg
سكوت ليمبكي عن Chipmunk2D
كريستوف ريشيو لـ glm
Rich Geldreich لأداة إعادة تشكيل الصور وضاغط jpeg
أرسيني كابولكين لpugixml
جيسون بيركنز لمرحلة ما قبل الإنتاج
Martín Lucas Golini (أنا) وجميع المساهمين العديدين في SOIL2 وEFsw
مجتمع Xiph مفتوح المصدر لـ libogg و libvorbis
مجتمع ARMmbed لـ mbed TLS
kcat للفتح الناعم
مشروع فري تايب
والكثير من الناس!
رخصة معهد ماساتشوستس للتكنولوجيا