数据驱动的动画状态
编辑:澄清我的问题是什么:这是处理内容创建/管理中游戏引擎中动画/动画状态的好方法吗?这样做的缺点是什么?将有替代方法吗?-尽管我的回答在评论中得到了部分回答,但这似乎是必经之路。 我正在尝试在2D游戏引擎爱好项目中处理动画,而无需对其进行硬编码。在我看来,硬编码动画状态似乎是一种常见但非常奇怪的现象。 一些背景知识:我正在使用一个实体系统,在该系统中组件是数据包,而子系统则对它们起作用。我选择使用轮询系统来更新动画状态。 对于动画状态,我的意思是:“ walking_left”,“ running_left”,“ walking_right”,“ shooting”,... 我处理动画的想法是将其设计为数据驱动模型。数据可以存储在xml文件,rdbms等文件中,也可以在游戏/关卡/开始时加载。通过这种方式,您可以轻松地编辑动画和转场,而不必在您的各处更改代码游戏。 作为示例,我制作了一个我想到的数据定义的xml草案。 一个非常重要的数据就是动画的描述。动画将具有唯一的ID(描述性名称)。它将保存图像的参考ID(它使用的Sprite表,因为不同的动画可能使用不同的Sprite表)。每秒运行动画的帧数。此处的“重播”定义了动画应运行一次还是无限次运行。然后,我将矩形列表定义为框架。 <animation id='WIZARD_WALK_LEFT'> <image id='WIZARD_WALKING' /> <fps>50</fps> <replay>true</replay> <frames> <rectangle> <x>0</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> <rectangle> <x>45</x> <y>0</y> <width>45</width> <height>45</height> </rectangle> </frames> </animation> 动画数据将被加载并保存在动画资源池中,并由使用它的游戏实体引用。它将被视为资源,例如图像,声音,纹理,... 要定义的第二个数据将是用于处理动画状态和过渡的状态机。这定义了游戏实体可以处于的每个状态,可以过渡到的状态以及触发状态改变的原因。 每个实体的状态机都不同。因为鸟类可能具有“行走”和“飞行”状态,而人类只有“行走”状态。但是它可以由不同的实体共享,因为多个人可能具有相同的状态(尤其是当您定义一些常见的NPC(例如怪物等)时)。另外,兽人的状态可能与人类相同。只是为了说明该状态定义可以共享,但只能由一组选定的游戏实体共享。 <state id='IDLE'> <event trigger='LEFT_DOWN' goto='MOVING_LEFT' /> <event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' /> </state> <state id='MOVING_LEFT'> <event …