Questions tagged «fsm»

11
如何在游戏中实现对话框树?
在我的游戏中实现对话框树系统的最佳方法是什么?我希望NPC为播放器提供不同的响应集,其中一些响应仅在播放器具有一项或发生先前事件时才会出现。
51 fsm  npc 

3
如何将有限状态机连接到基于组件的体系结构?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 3年前关闭。 状态机似乎在基于组件的体系结构中造成有害的依赖关系。 具体来说,如何在状态机和执行与状态相关的行为的组件之间处理通信? 我在哪里: 我是基于组件的体系结构的新手。 我正在制作格斗游戏,尽管我认为这并不重要。我设想我的状态机将用于切换“蹲下”,“破折号”,“阻塞”等状态。 我发现这种状态管理技术对于基于组件的体系结构来说是最自然的系统,但是它与我读过的技术相冲突: 用于可变行为角色的动态游戏对象组件系统它建议所有组件都激活/停用通过不断检查激活条件来检查自己。 我认为像“跑步”或“步行”之类的动作在状态上是有意义的,这与此处接受的响应不同:https : //gamedev.stackexchange.com/a/7934 我发现这很有用,但是模棱两可:如何在基于组件的游戏架构中实现行为?它建议有一个单独的组件,其中仅包含状态机。但是,这需要在状态机组件和几乎所有其他组件之间进行某种耦合。我不明白该如何处理耦合。这些是一些猜测: A. 组件取决于状态机: 组件接收对状态机组件的引用getState(),该引用返回枚举常量。组件会定期进行自我更新,并根据需要进行检查。 B. 状态机取决于组件: 状态机组件接收对其监视的所有组件的引用。它查询他们的getState()方法以查看它们的位置。 C. 它们之间的某种抽象 使用事件中心吗?命令模式? D. 使用引用组件状态模式的单独状态对象。创建了单独的状态对象,这些状态对象激活/停用一组组件。状态机在状态对象之间切换。 我正在将组件视为方面的实现。他们在内部完成使该方面实现所需的一切。看起来组件应该独立运行,而不依赖其他组件。我知道一些依赖是必要的,但是状态机似乎要控制我的所有组件。

2
数据驱动的动画状态
编辑:澄清我的问题是什么:这是处理内容创建/管理中游戏引擎中动画/动画状态的好方法吗?这样做的缺点是什么?将有替代方法吗?-尽管我的回答在评论中得到了部分回答,但这似乎是必经之路。 我正在尝试在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 …
14 animation  state  fsm 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.