0

我正在用 Python 编写一个 ECS 框架和一个游戏。在 ECS 框架中,组件应该只包含数据。但是,有时需要设置代码来创建数据。例如,在音频组件中,数据将是要播放的声音的音量和音频文件的路径。但是在音频播放库中,有一些对象来表示声音,sound.play()例如,它们有一个方法。我的问题是这个对象是否应该在组件中创建,这违反了实体应该是纯数据的规则,还是在系统中。如果最好在系统中完成,则只需完成一次(如果需要每帧创建一次音频文件,则会损害性能)。做这个的最好方式是什么?

4

1 回答 1

1

我的问题是这个对象是否应该在组件中创建,这违反了实体应该是纯数据的规则,还是在系统中。如果最好在系统中完成,则只需完成一次(如果需要每帧创建一次音频文件,则会损害性能)。做这个的最好方式是什么?

当您将外部模型用于实体系统时,我认为要确定的最重要任务之一是实体和组件生命周期管理。没有它,编写不开始类似于意大利面条的系统代码变得非常困难。

那里有一些实现,他们希望您构建实体,构建其组件列表,然后激活实体。一旦实体被激活,就不能添加或删除组件,只能更改组件的属性值。为了添加/删除组件,您需要停用实体,进行更改,然后重新激活它。

假设我们使用这个实体生命周期过程。

当带有音频组件的实体被激活时,通知音频系统,从音频组件中读取属性,最后创建音频框架的声音对象。然后系统负责维护组件和声音对象之间的簿记映射。该内部映射是系统将使用每个帧来执行其更新的内容。

当带有音频组件的实体被停用时,通知音频系统,销毁与内部簿记映射中的组件关联的音频框架的声音对象,然后从内部映射中删除条目。

于 2019-05-06T14:57:50.393 回答