ECS ذهابا وإيابا

مرحبا يا هابر! أقدم لكم الترجمة من هذه المادة "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 , . , .


.


All Articles