مرحبا يا هابر! أقدم لكم الترجمة من هذه المادة "ECS ذهابا وإيابا - الجزء 1 - مقدمة" من قبل ميشيل skypjack Caini .
ECS ذهابا وإيابا
الجزء 1 - مقدمة.
عندما علمت لأول مرة عن نظام مكون كيان القالب المعماري ، ذهبت للبحث عن مزيد من المعلومات حوله على الإنترنت. ولكن ، لسوء الحظ ، لم يتم تسليط ضوء كافٍ على هذا الموضوع ، ولم تكن هناك موارد حيث سيتم وصف أساليب مختلفة مع إيجابياتهم وسلبياتهم. تقريبًا كل مقالة أو مشاركة أو تعليق (نسبة كبيرة منها) كانت تتعلق بتنفيذ واحد محدد ، ولم تتم الإشارة إلا إلى أمثلة أخرى.
في هذا المنشور ، سأحاول جعلك على اطلاع واكتشاف بعض النماذج التمهيدية لك ، مع تقديم بعض النصائح حتى تتمكن من إنشاء ECS الخاص بك.
لماذا يجب علي استخدام ECS؟
حاول ألا تنخدع بما يقولون. إذا كنت تعمل على مشروعات AAA على مستوى جاد ، فإن السبب الرئيسي الذي يجعلك تستخدم مثل هذه الأداة الخطيرة هو تنظيم الشفرة ، وليس (فقط) الأداء. بالطبع ، الأداء ليس هو آخر شيء ، ولكن قاعدة التعليمات البرمجية جيدة التنظيم لا تقدر بثمن ، ومع معظم الألعاب لن تواجه مشاكل في الأداء ، سواء كانت مكتوبة باستخدام نموذج OPP أو مع تنفيذ اختياري آخر لقالب المكون.
في الأساس ، تعد البرمجة الموجهة للمكونات أداة قوية للغاية تسمح لك بجعل الشفرة قابلة للتوسيع بسهولة وتسريع دورة التطوير. مما لا شك فيه أن كل هذا يجب أن يكون هدفك الأساسي.
بالطبع ، لا تنسى الأداء. على الرغم من أننا في رابطة مختلفة ، في المقالات التالية وفي المقالات التمهيدية التالية ، سأقدم لك أمثلة كافية على النماذج ، على الأقل سيتم توجيه بعض النماذج بدقة إلى الأداء.
المقدمة
بادئ ذي بدء ، دعنا نكتشف ما يعنيه التحول من OOP إلى العالم المكون.
من الناحية التقريبية ، هذه مسألة فصل بين الأشياء. تخيل كل مفاهيمك (فئات) الأشياء على متن الطائرة. هنا القزم ، القزم ، شخصية اللعبة ، الحجر ، وما إلى ذلك ، كلهم يتبعون بعضهم البعض. وهنا لدينا طريقتان فقط لقطعها: أفقياً ورأسياً.
إذا قطعت عموديًا ، فستحصل على المفاهيم بأنفسهم. وبعبارة أخرى ، فصول OOP العادية ، لا أكثر ولا أقل.
, , , . , , .
?
( ), update . , , , .
, . . , , . , .
, , - .
ECS back and forth
ECS.
, , .
«Game Programing Patterns». -.
, ECS , .
, , .
- . , , . , . , .
– . .
. , — . , .
, , , , -. - , , . , - . , , , - .
– family generator. , . , : entityx and EnTT.
family generator.
class family {
static std::size_t identifier() noexcept {
static std::size_t value = 0;
return value++;
}
public:
template<typename>
static std::size_t type() noexcept {
static const std::size_t value = identifier();
return value;
}
};
:
const auto id = family::type<my_type>();
. . , , .
family generator . , , , .
:
- ( ) . – ECS, , , - .
, , - , .
?
, , . , , . bitset .
, , . family generator , . .
, — . , , , . :
void my_nth_system(std::vector<game_objects> &objects) {
for(auto &&object: objects) {
if(object.has<position, velocity>()) {
auto &pos = object.get<position>();
auto &vel = object.get<velocity>();
}
}
}
, : , . , , .
. , . , : , , .
. , , , . , , , , , . , . , , .
, – . ? . , . , ? , - , .
: —
– .
. , . . , . .
, , - , — :). , . 0, – 1, . , , 0, 1.
? , , , 0 0, 1 1, . , N M , .
. , , . , . - , entityx, ECS C++.
bitset . . , C N > 0. C , N . C 0, . ? Bitsets – .
, , , bitsets .
, , . , , , , , -, . , : - - , , . , , , , , . bitset , .
?
, . , , , , , .
, . , , , , .
,
, , .
, , GitHub , . , .
.