Skip to main content

Entity-Component System very popular design pattern for big and complex games

Entity-Component System


Entity component system is a widely used game designing pattern for gaming. 



what is an Entity-Component System?


ECS can be divided into three main categories 

1. Component is a behavior or data 

2. Entity is just an id and you can add Component to Entity

3. System deals mostly with logic like rendering game, updating physics or dealing with game logic



so a Component is just behavior or little logical data like the position of a character in-game scene or scaling factor or RGB color value.


An entity is just a id and its main job to track all behavior ( Component ) so that's means a Entity can multiple Component or behavior.


added small example in typescript 



working link=> https://stackblitz.com/edit/gaming-entity-component-system?file=index.ts

above working link easily be converted to c++ which is widely used gaming language 


example
 Entity position Component scale Component rotation Component
 Monster   Monster position Monster scalingMonster rotation 
 hero    hero position                           hero scaling       hero rotation
 boos boss position boss scaling boss rotation
 so on...   

System- handle complex logics mainly rendering update components at runtime or change the behaviour with renderloop 



notes about ecs 


1. the above example is very simple and suitable for big games


2. But for big games ECS combine with other designing pattern


3.                     Singleton pattern is widely used pattern to share common data between different game scene


4. static classes widely used to solve logic. 



5. sometimes inheritance is a better to approach when ur game is small



6. composition is another approach which can be used in creating games


7. so the question where i can use ECS.


my advice


 if the game contains multiple characters like a hero, monster, boss, sub-boss, evil hero or many more and each character share multiple behaviour it would be tuff to used inheritance in such cases.





Comments

Popular posts from this blog

Better Memory management with PixiJS or How to manage cpu and cpu memory in PixiJS.

PixiJS is my favorite framework when i am looking for a web games specially for mobile or desktop  PixiJS is fast blazing fast and you can get a decent FPS even on older device.   so here is my optimization techniques for PixiJs 1. manage your sprites in a better way use spritesheet to reduce the draw calls create big sprite sheet which contain multiple sprites can be draw in gpu with a single draw call. use TexturePacker  https://www.codeandweb.com/texturepacker  best tool when its comes to spritesheet 2. for floating point calculation round off calculation for example let  speed = 0.75 ; let  position = 100 ; console . log ( Math . round ( speed * position )) 3. don't create very big canvas when u need a big canvas size game just try to create a small canvas and translate it. 4. its very important one managing TextureCache in memory you can get all TextureCache list by using  Object.entries(PIXI.utils.TextureCache); so even you use ap...

adding particles Effect in pixijs using https://pixijs.io/pixi-particles-editor/

adding particle in pixijs is very easy using the below tool more information can be found below https://github.com/pixijs/pixi-particles https://pixijs.io/pixi-particles-editor/ required packages  /// < reference path = "node_modules/pixi-particles/ambient.d.ts" /> import 'pixi-particles' code of particle delcare a     global variable   private emitter ?: Emitter ; const img = PIXI . Texture . from ( "./assets/images/particle.png" ); this . emitter = new Emitter ( this ,[ img ],{ "alpha" : { "start" : 0.62 , "end" : 0.39 }, "scale" : { "start" : 0.1 , "end" : 0.9 , "minimumScaleMultiplier" : 1.25 }, "color" : { "start" : "#ffff8f" , "end" : ...