阅读 62

ECS Contexts 和 Group简介

Contexts简述

Contexts类似于一个工厂,我们可以利用Contexts创建单独的entity和group,例如:

GameContext gameContext = Contexts.sharedInstance.game;
var entity = gameContext.CreateEntity();
var group = gameContext.GetGroup(GameMatcher.Position);
复制代码

group表示gameContext中任何含有Position Component的entity都将被添加到group中,并且group是实时更新的,例如一个新创建了一个entity,并给这个entity加上Position Component,则group中就会包含这entity,反之,一个entity删除了本有的Position Component,则会从group中删除。

Matcher

Match是一种描述什么样的entity才可以添加进group中。GameMather意味着已经存在了一个GameContext,并且我们可以访问与这个Contexts相关的任何一个Component。 为了表示更复杂的情况,还可以用AllOf,AnyOf,NoneOf。 例如:

var g = gameContext.GetGroup(Matcher<GameEntity>.AllOf(GameMatcher.Position, GameMatcher.AssetName));
复制代码

表示,有Position 和 AssetName两个Component的entity才可以进入group中。

var g = gameContext.GetGroup(Matcher<GameEntity>.AnyOf(GameMatcher.Position, GameMatcher.AssetName));
复制代码

表示,有Position 或 AssetName Component的entity可以进入group中。

var g = gameContext.GetGroup(Matcher<GameEntity>.AllOf(GameMatcher.Position, GameMatcher.AssetName).NoneOf(GameMatcher.Destroy));
复制代码

NoneOf不可以单独使用,只能与前两种结合使用,上面表示含有Postion 和 AssetName,但不含有Destroy Component的entity可以加入group中。