Entity-Component-System

A-Frame是基于一种entity-component-system模式(ECS),常见的游戏开发模式,强调在继承可组合性:

  • 一个实体 entity 本质上是一个通用的对象,并和呈现。
  • 一个组件 component 是一个可重用的模块插入实体提供的外表,行为,和/或功能。他们是即插即用的对象。
  • 系统 system提供全球范围、服务和管理类的组件。

ECS与丰富的行为让我们构建复杂的实体通过将不同的可重用的组件插入插座上的实体。对比传统的继承,如果我们想要扩展一个对象,我们需要手动创建一个新类。

ECS授予开发者而无许可创新的关键。开发人员可以编写、共享和插入组件扩展新功能或对现有功能进行迭代。

概念

作为一个抽象的例子,想象一个车是一个实体

  • 我们可以添加一个颜色color分量影响汽车的颜色。
  • 我们可以添加一个引擎组件engine的属性as “horsepower” or “weight” which affect the speed of the car.
  • 我们可以添加一个轮胎tire组件的属性,如“控制”,影响汽车的牵引力。

这些组件可以被混合并匹配,甚至被用于其他车辆,如飞机、摩托车、或船(我们不指定一个轮胎tire组件)。

作文

采取这种模式的A-Frame:

  • 一个实体通过一个HTML元素(即表示。,<a-entity>)。
  • 一个组件通过一个HTML属性表示。
  • 通过HTML组件属性值代表定义属性。

例如,组成一个西红柿的球体从一个实体,我们可以把几何geometry和材料material组件。因为组件需要多个属性,我们定义属性值使用内联样式的语法:

<a-entity geometry="primitive: sphere; radius: 1.5"
          material="color: tomato; metalness: 0.7"></a-entity>

从那里,我们可以把越来越多的组件添加任何外观、行为,或者我们想要的东东。把光组件 light component发出光。附加组件的声音sound component听起来玩。附加物理 physics component组件,它受重力和碰撞检测:

我们甚至可以把其他人创建的第三方组件。如果有人写一个组件,使网格爆炸,或一个组件,使网格使用帆布的材料结构,我们可以将组件放入人字形经验和立即在HTML中使用它。entity-component-system模式提供了巨大的灵活性和可扩展性。