实体组件系统中的边界和位置

Bounds and position in entity component system

我正在开发主要使用 ECS(不是纯 ECS)的游戏引擎,但我 运行 遇到了问题。

一些实体将需要一个 Bounds 组件(例如,一个具有 Rectangle 代表位置、宽度和高度的组件)。像按钮。 许多实体还需要一个包含位置但不一定包含边界的组件。

如何协调重叠?

1) 如果一个实体既有Bounds成分又有位置成分,那么就会有两个位置。不好

2)实体只有Bounds个组件继承自position组件。丑陋,因为我必须从位置组件覆盖 translate 等实用方法,并让它更新边界对象的位置。然后实体将没有位置组件,这很奇怪。

3) Bounds 组件只包含宽度和高度。我不喜欢这样,因为这样我就不能使用 Rectangle class 之类的东西来表示边界。

有什么想法吗?谢谢。

我会选择 3,如果你有一个 Bound 组件并在本地框架中表达边界,则要求有一个 Transform 组件。

使用带有左下角和右上角的 Rectangle 仍然有意义,因为边界的原点并不总是与组件的原点相同。