لقد كان
EnTTحلمًا حتى الآن ، ولم نعثر على خطأ واحد حتى الآن ومن السهل جدًا العمل معه- كل مستخدم ENTT على الإطلاق
EnTT هي رأس فقط ، صغير وسهل الاستخدام لمكتبة لبرمجة الألعاب وأكثر مكتوبة بكثير في C ++ الحديثة .
من بين أمور أخرى ، يتم استخدامها في Minecraft بواسطة Mojang ، و Arcgis Runtime SDKs من Esri و The Amazing Ragdoll .
إذا كنت لا ترى مشروعك في القائمة ، فيرجى فتح مشكلة أو إرسال علاقات عامة أو إضافة علامة #entt إلى موضوعاتك ! ؟
هل تريد مواكبة التغييرات أو هل لديك سؤال لا يتطلب منك فتح مشكلة؟
انضم إلى قناة Gitter وخادم Discord ، تعرف على مستخدمين آخرين مثلك. كلما نحن أكثر ، كان أفضل للجميع.
لا تنس التحقق من الأسئلة الشائعة والويكي أيضًا. قد تكون إجاباتك موجودة بالفعل.
هل تريد دعم EnTT ؟ فكر في أن تصبح راعياً أو تقديم تبرع عبر PayPal .
شكرا جزيلا لهؤلاء الناس وشكر خاص ل:


نظام المكون من الكائنات (المعروف أيضًا باسم ECS ) هو نمط معماري يستخدم في الغالب في تطوير اللعبة. لمزيد من التفاصيل:
بدأ هذا المشروع كنظام مكون من العناصر الخالصة. بمرور الوقت ، نمت قاعدة الشفرة مع إضافة المزيد والمزيد من الفصول والوظائف.
فيما يلي قائمة موجزة ، لكنها غير مكتملة لما تقدمه اليوم:
constexpr لأسماء الموارد القابلة للقراءة البشرية. النظر في هذه القائمة العمل قيد التقدم وكذلك المشروع. تم توثيق واجهة برمجة التطبيقات بأكملها بالكامل في الرمز لأولئك الذين هم شجعان بما يكفي لقراءته.
من فضلك ، لاحظ أن جميع الأدوات صديقة لـ DLL الآن وتشغيلها بسلاسة عبر الحدود.
شيء واحد معروف أكثر هو أن EnTT يستخدم أيضًا في Minecraft .
بالنظر إلى أن اللعبة متوفرة حرفيًا في كل مكان ، يمكنني أن أقول بثقة إن المكتبة قد تم اختبارها بشكل كاف على كل منصة يمكن أن تتبادر إلى الذهن.
# include < entt/entt.hpp >
struct position {
float x;
float y;
};
struct velocity {
float dx;
float dy;
};
void update (entt::registry ®istry) {
auto view = registry. view < const position, velocity>();
// use a callback
view. each ([]( const auto &pos, auto &vel) { /* ... */ });
// use an extended callback
view. each ([]( const auto entity, const auto &pos, auto &vel) { /* ... */ });
// use a range-for
for ( auto [entity, pos, vel]: view. each ()) {
// ...
}
// use forward iterators and get only the components of interest
for ( auto entity: view) {
auto &vel = view. get <velocity>(entity);
// ...
}
}
int main () {
entt::registry registry;
for ( auto i = 0u ; i < 10u ; ++i) {
const auto entity = registry. create ();
registry. emplace <position>(entity, i * 1 . f , i * 1 . f );
if (i % 2 == 0 ) { registry. emplace <velocity>(entity, i * . 1f , i * . 1f ); }
}
update (registry);
} بدأت في تطوير EnTT للسبب الخاطئ : كان هدفي هو تصميم نظام مكون للكيانات للتغلب على مكتبة أخرى مفتوحة المصدر معروفة جيدًا من حيث الأداء وربما استخدام الذاكرة.
في النهاية ، فعلت ذلك ، لكنها لم تكن مرضية للغاية. في الواقع لم يكن مرضيا على الإطلاق. الأسرع ولا شيء أكثر ، قليلا إلى حد ما في الواقع. عندما أدركت ذلك ، حاولت بجد الحفاظ على الأداء الرائع لـ EnTT وإضافة جميع الميزات التي أردت رؤيتها في مكتبتي الخاصة في نفس الوقت.
في الوقت الحاضر ، تعتبر EnTT أخيرًا ما كنت أبحث عنه: لا يزال أسرع من منافسيها ، واستخدام الذاكرة المنخفضة في الحالة المتوسطة ، واجهة برمجة تطبيقات جيدة حقًا ومجموعة رائعة من الميزات. وأكثر من ذلك ، بالطبع.
لما يستحق الأمر ، فلن تراني أبدًا أحاول جعل المشاريع الأخرى تبدو سيئة أو تقدم مقارنات مشكوك فيها لمجرد جعل هذه المكتبة تبدو أكثر برودة.
أترك هذا النشاط للآخرين ، إذا كانوا يستمتعون به (ويبدو أن بعض الناس يحبونه بالفعل). أفضل الاستفادة من وقتي بشكل أفضل.
إذا كنت مهتمًا ، فيمكنك تجميع الاختبار benchmark في وضع الإصدار (لتمكين تحسينات المترجمة ، وإلا فإنه لن يكون له معنى ضئيل) عن طريق تعيين خيار ENTT_BUILD_BENCHMARK الخاص ON CMake ثم قم بتقييم نفسك ما إذا كنت راضيًا عن النتائج أم لا.
هناك أيضًا الكثير من المشاريع التي تستخدم EnTT كأساس للمقارنة (يجب أن يخبرك هذا كثيرًا بالفعل). العديد من هذه المعايير خاطئة تمامًا ، العديد من غيرها غير مكتمل ، وجيد في حذف بعض المعلومات واستخدام الوظيفة الخاطئة لمقارنة ميزة معينة. من المؤكد أن هناك أيضًا تلك الجيدة ولكنهم يتقدمون بسرعة إذا لم يتم تحديث أي شخص ، خاصةً عندما يتم تطوير المكتبة التي يتعاملون معها بنشاط.
من بينهم جميعًا ، يبدو هذا هو أحدث مشروع ويغطي أيضًا عددًا معينًا من المكتبات. لا أستطيع أن أقول بالضبط ما إذا كان يتم استخدام EnTT بشكل صحيح أم لا. ومع ذلك ، حتى لو تم استخدامه بشكل سيء ، فلا يزال يتعين عليه إعطاء القارئ فكرة عن المكان الذي ستعمل فيه.
EnTT هي مكتبة رأس فقط. هذا يعني أن بما في ذلك رأس entt.hpp يكفي لتضمين المكتبة ككل واستخدامها. بالنسبة لأولئك الذين يهتمون فقط بنظام المكونات الكيان ، فكر في تضمين entity/registry.hpp الوحيد.
إنها مسألة إضافة السطر التالي إلى أعلى ملف:
# include < entt/entt.hpp >استخدم السطر أدناه لتضمين فقط نظام المكونات الكيان بدلاً من ذلك:
# include < entt/entity/registry.hpp > ثم قم بتمرير الوسيطة -I إلى المترجم لإضافة دليل src إلى مسارات تضمين.
لتكون قادرة على استخدام EnTT ، يجب على المستخدمين توفير برنامج التحويل البرمجي كامل الميزة يدعم ما لا يقل عن C ++ 17.
المتطلبات أدناه إلزامية لتجميع الاختبارات واستخراج الوثائق:
CMake 3.7 أو أحدث.Doxygen 1.8 أو أحدث. بدلاً من ذلك ، يتم دعم Bazel أيضًا كنظام بناء (ائتمانات لـ Zaucy التي عرضت الحفاظ عليها).
في الوثائق أدناه ، ما زلت أشير إلى CMake ، هذا هو نظام الإنشاء الرسمي للمكتبة.
لاستخدام EnTT من مشروع CMake ، ما عليك سوى ربط هدف موجود إلى الاسم المستعار EnTT::EnTT .
تقدم المكتبة كل ما تحتاجه لتحديد موقعه (كما هو الحال في find_package ) ، أو التضمين (كما في add_subdirectory ) ، أو الجلب (كما هو الحال في FetchContent ) أو استخدامه في العديد من الطرق التي يمكنك التفكير فيها والتي تنطوي على CMake .
سيتطلب تغطية جميع الحالات الممكنة أطروحة وليس ملف ReadMe بسيطًا ، لكنني واثق من أن أي شخص يقرأ هذا القسم يعرف أيضًا ما الذي يدور حوله ويمكنه EnTT من مشروع CMake دون مشاكل.
عند استخدام CMake ، ما عليك سوى تمكين الخيار ENTT_INCLUDE_NATVIS والاستمتاع به.
خلاف ذلك ، تتم تغطية معظم الأدوات عبر NATVIS ويمكن العثور على جميع الملفات في دليل natvis ، مقسومًا على الوحدة النمطية.
إذا اكتشفت أخطاء أو لديك اقتراحات ، فأي مساهمة مرحب بها!
EnTT متاح لبعض أدوات التغليف الأكثر شهرة. بخاصة:
Conan ، مدير حزمة C/C ++ للمطورين.
vcpkg ، أداة التغليف Microsoft VC ++.
يمكنك تنزيل وتثبيت EnTT في بضع خطوات بسيطة:
$ git clone https://github.com/Microsoft/vcpkg.git
$ cd vcpkg
$ ./bootstrap-vcpkg.sh
$ ./vcpkg integrate install
$ vcpkg install entt
أو يمكنك استخدام الميزة experimental لاختبار أحدث التغييرات:
vcpkg install entt[experimental] --head
يتم الاحتفاظ بمنفذ EnTT في vcpkg من قبل أعضاء فريق Microsoft والمساهمين في المجتمع.
إذا كان الإصدار قديمًا ، فيرجى إنشاء مشكلة أو سحب طلب على مستودع vcpkg .
Homebrew ، مدير الحزمة المفقودة لماكوس.
متاح كصيغة البيرة. فقط اكتب ما يلي لتثبيته:
brew install skypjack/entt/entt
build2 ، بناء أدوات لتطوير وتعبئة الرمز C و C ++.
من أجل استخدام حزمة entt في مشروع build2 ، أضف السطر التالي أو خط مشابه إلى ملف manifest :
depends: entt ^3.0.0
تحقق أيضًا من أن التكوين يشير إلى مستودع صالح ، بحيث يمكن العثور على الحزمة بواسطة build2 :
cppget.org ، مستودع المجتمع المركزي مفتوح المصدر ، يمكن الوصول إليه مثل https://pkg.cppget.org/1/stable .
مستودع مصدر الحزمة: يمكن الوصول إليه إما https://github.com/build2-packaging/entt.git أو ssh://[email protected]/build2-packaging/entt.git . لا تتردد في الإبلاغ عن مشكلات مع هذه الحزمة.
يمكن استخدام كلاهما مع bpkg add-repo أو إضافته في repositories.manifest المشروع. انظر الوثائق الرسمية لمزيد من التفاصيل.
bzlmod ، نظام إدارة التبعية الخارجي في Bazel.
لاستخدام وحدة entt في مشروع bazel ، أضف ما يلي إلى ملف MODULE.bazel :
bazel_dep ( name = "entt" , version = "3.12.2" ) سيكون Entt متاحًا الآن كـ @entt (قصير لـ @entt//:entt ) لاستخدامه في deps لقاعدة cc_* .
ضع في اعتبارك هذه القائمة عملًا مستمرًا وساعدني في جعلها أطول إذا أردت.
يدعم EnTT أيضًا pkg-config (للحصول على بعض التعريفات للدعم على الأقل). يتم إنشاء ملف مناسب يسمى entt.pc وتثبيته في دليل مناسب عند تشغيل CMake .
يجب أن يجعل هذا أيضًا أسهل في الاستخدام مع أدوات مثل Meson أو ما شابه.
تستند الوثائق إلى doxygen. لبناءها:
$ cd build
$ cmake .. -DENTT_BUILD_DOCS=ON
$ make
يتم إنشاء مرجع API بتنسيق HTML في دليل build/docs/html . للتنقل مع متصفحك المفضل:
$ cd build
$ your_favorite_browser docs/html/index.html
نفس الإصدار متاح أيضًا عبر الإنترنت لأحدث الإصدار ، وهذا هو آخر علامة مستقرة.
علاوة على ذلك ، يوجد ويكي مخصص للمشروع حيث يمكن للمستخدمين العثور على جميع صفحات الوثائق ذات الصلة.
لتجميع وتشغيل الاختبارات ، يتطلب EnTT googletest .
يقوم cmake بتنزيل المكتبة وتجميعها قبل تجميع أي شيء آخر. من أجل إنشاء الاختبارات ، قم بتعيين خيار CMake ENTT_BUILD_TESTING إلى ON .
لبناء مجموعة الاختبارات الأساسية:
$ cd build$ cmake -DENTT_BUILD_TESTING=ON ..$ make$ make testلاحظ أن المعايير ليست جزءًا من هذه المجموعة.
يستخدم EnTT على نطاق واسع في التطبيقات الخاصة والتجارية. لا أستطيع حتى أن أذكر معظمهم بسبب بعض التواقيع التي وضعتها في بعض المستندات منذ وقت. لحسن الحظ ، هناك أيضًا أشخاص أخذوا الوقت لتنفيذ مشاريع مفتوحة المصدر بناءً على EnTT ولم يتراجعوا عندما يتعلق الأمر بتوثيقها.
هنا يمكنك العثور على قائمة غير مكتملة من الألعاب والتطبيقات والمقالات التي يمكن استخدامها كمرجع.
إذا كنت تعرف موارد أخرى هناك حول EnTT ، فلا تتردد في فتح مشكلة أو علاقات عامة وسأكون سعيدًا بإضافتها إلى القائمة.
يتم تقدير طلبات الميزات ، PRS ، الاقتراحات والتعليقات.
إذا وجدت أنه يمكنك المساعدة وترغب في المساهمة في المشروع من خلال تجربتك أو ترغب في الحصول على جزء من المشروع لسبب آخر ، لا تتردد في الاتصال بي مباشرة (يمكنك العثور على البريد في الملف الشخصي).
لا أستطيع أن أعد أن يتم قبول كل مساهمة ، لكن يمكنني أن أؤكد أنني سأبذل قصارى جهدي لأخذها جميعًا في أقرب وقت ممكن.
إذا قررت المشاركة ، فيرجى الاطلاع على الإرشادات للمساهمة قبل إنشاء مشكلات أو سحب طلبات.
ألق نظرة أيضًا على قائمة المساهمين لمعرفة من شارك حتى الآن.
الكود والوثائق حقوق الطبع والنشر (C) 2017-2024 ميشيل كيني.
شعار الملون حقوق الطبع والنشر (C) 2018-2021 ريتشارد كاسيريس.
رمز صدر تحت رخصة معهد ماساتشوستس للتكنولوجيا.
الوثائق التي تم إصدارها تحت CC بحلول 4.0.
جميع الشعارات التي تم إصدارها تحت CC BY-SA 4.0.