我如何创建一个健全的经理?

我有一个基本的实体系统。 现在我想添加audio。 我想创建一个监视实体的数据库类,从中提取数据,并在必要时创建audiostream。

我正在使用C ++和SDL2。 什么是这个简单的方法?

假设您有一个简单的骨骼组件/实体/系统体系结构,最简单的方法是创建一个audio系统和一个audio组件。 AudioComponent将包含一些引用(可能只是一个string)到一些audio和相应的“状态”标志。 与其他系统一样,audio系统将扫描实体,提取具有audio分量的audio组件,并根据状态处理audio。

由于您可能需要将多个audio片段附加到实体,因此您可以将这些audio片段logging为对的列表; 这对是一个状态和audio参考,但其余的仍然适用。 你也可以把它们放在地图中,这样就可以进行简单的查找。

如果您稍后有信号/事件系统,则可以根据事件更新audio的状态; 如碰撞。 虽然在这一点上audio系统本身可能更好地监听事件本身,并只从组件中提取audio源参考。

我能想到的另一种方法是完全忘记audio组件。 这是一个直接的实施。 创建一个响应实体状态变化的audio系统。 例如,当玩家的健康状况比最后一次状态下降时发出“伤害”声音,当突然变为0时发出死亡声音。

这是一个非常广泛的问题。 老实说,我需要一些关于你如何设置它的想法,以及你希望完成的更具体的想法来回答。

我现在最好的想法是创建一个基本的声音组件与一些方法来检索声音信息( virtual sound_data getSound() =0;作为一个示例方法)。 构造者会将它添加到某个系统的列表中,并且该系统将遍历列表并以这种方式获取声音数据。

这并不是你想到的,但是使用消息或事件发送信息给一个产生声音的实体可能是一个更好的主意。