实体-组件-系统系列
OOP继承问题
Paradigma yang pada umumnya digunakan dalam pemrograman adalah paradigma 面向对象编程 (OOP)。 Paradigma ini memodelkan代码seperti dunia nyata yaitu “ Memandang sesuatu代码sebagai对象yang memiliki数据(属性)dan dapat melakukan sesuatu(方法)” 。 Paradigma OOP memiliki konsep 继承 (子类型)untuk menyajikan 可重用代码 atau 代码共享 。
Dalam OOP继承,kita tidak boleh meng- 继承 dari 2 对象 。 Walapun Men-inherit dari 2对象C ++,tap tidak diperbolehkan dalam konsep OOP。 Nah hal ini menjadi masalah pada kasus tertentu dalam pengembangan game pada khususnya,seperti contoh berikut:

Mungkin teman-teman akan berkata“ Pemodelan yang saya lakukan di atas tidak tepat,seharusnya TargetObject dan AttackerObject tidak menjadi parent”。 Jika Teman-teman berpendapat seperti itu,Coba Teman-teman modelkan sesuai pendapat teman-teman dan perhatikan ketika menambah objek baru yang memiliki 2 kemampuan di atasnya,maka akan terjadi masalah yang sama。
Isu di atas kerap menjadi masalah besar pada pengembangan游戏pada khususnya,游戏memiliki sifat selalu di update seperti dengan menambah karakter baru( 新英雄 )atau kemampuan khusus yang baru( 新能力 )。 丹甘·康塞普(Dengan Konsep)继承,凯蒂卡·斯特鲁克(sutah didefinisikan),玛卡·阿坎·丁布图坎(maka akan dibutuhkan)重构了杨·库普普(yakapup)。 Yah kita tau,重构beresiko besar,terlebih ketika produk sudah rilis,maka游戏开发者harus berhati-hati dengan masalah ini。
实体组件系统作为解决方案
继承人,Scott Bilas,2002年游戏开发者大会(GDC),mengusulkan arsitektur实体组件系统(ECS)(幻灯片),dengan mengantikan 继承 dengan 组成 。 实体组件系统memiliki 3 uts utama,yaitu:
零件
组件adalah peng-groupan数据sesuai kebutuhan atau fitur tertentu。 组件tidak mengandung逻辑,汉亚数据。 Contoh dari组件adalah:
– PositionComponent(x,y,z)
– VelocityComponent(x,y,z)
– HealthComponent(当前,最大值)
– AttackComponent(射程,速度,伤害)
– BonusComponent(黄金)
– AIComponent(状态,actionState等)
实体
实体adalah代表对象OOP sebelumnya。 Namun Implementasinya实体hanya sebuah angka untuk identifikasi。 实体memiliki banyak组件。 Contoh dari实体:
- 奖金主席
– PositionComponent
– HealthComponent
– BonusComponent - 可杀死的敌人
– PositionComponent
– VelocityComponent
– HealthComponent
– AttackComponent
– AIComponent - 不朽的敌人
– PositionComponent
– AttackComponent
– AIComponent
系统
系统adalah实现了dari逻辑。 系统ment-iterasi seluruh实体berdasarkan组件yang dimilikinya。 Contoh dari系统:
- AttackSystem, Melakukan逻辑攻击untuk seluruh实体yang memiliki组件:PositionComponent,HealthComponent和Dan AttackComponent。
- AISystem ,melakukan逻辑AI untuk seluruh实体yang memiliki组件:AIComponent
- BonusSystem, melakukan逻辑Pemberian奖金untuk seluruh实体yang memiliki组件:HealthComponent dan BonusComponent
- MovementSystem ,melakukan逻辑运动untuk seluruh实体yang memiliki组件:PositionComponent dan VelocityComponent

Jika perhatikan skema di atas,“ KillableBonusEnemy ”,maka kita tinggal menghubungkan dengan komponent PositionComponent,VelocityComponent,HealthComponent,AttackComponent,AIComponent, dan BonusComponent, Maka selanjutnya System akan otomatis mendetek。
闭幕
Nah,daris di atas kita mendapat gambaran bagaimana组成模型pada ECS menyelesaikan permasalahan继承pada OOP。 没错,selanjutnya kita akan membahas lebih dalam lagi contoh Implementasinin denden menyajikan code。 下一篇文章🙂