Questions tagged «behavior»

1
行为树代码示例?
http://altdevblogaday.org/2011/02/24/introduction-to-behavior-trees/ 显然,我在该网站上找到了最有趣的文章。你怎么看待这件事 ? 它缺少一些代码示例,您不知道吗?我还读到状态机与行为树相比不是很灵活……最重要的是,我不确定状态机与状态模式之间是否存在真正的联系……?
23 ai  state  tree  behavior 

1
行为树::耗时超过一滴答的动作
根据我对行为树的了解,每个行为都应该是一个短期目标导向的动作,可以通过几次迭代来完成。 因此,例如,以下是行为树的图像: 现在让我们假设“ 驱逐敌人”行为在树中进行了多次迭代。因此,每次通过都会调用Drive To Enemy,因为它现在处于运行状态。 问题是如果附近有敌人,我想打电话给Evade Enemy。并考虑到驱动器要敌人总是叫我没有机会打电话给躲避敌人(或许应该叫避开敌人)。 无论当前正在执行什么操作,我都应该遍历Tree EACH通行证吗? 我要这样做正确吗? 处理此类行为的正确方法是什么? 最初在Stackoverflow上被问到。认为这里将是一个更合适的地方来问这个问题。
19 ai  game-loop  behavior 

2
在简单的冒险游戏中实现行为
我最近一直在通过编写一个简单的基于文本的冒险游戏来娱乐自己,而我一直停留在看似非常简单的设计问题上。 简要概述一下:游戏分为Room对象。每个对象都有该房间Room中的Entity对象的列表。每个对象Entity都有一个事件状态,它是一个简单的string-> boolean映射,以及一个动作列表,它是一个string-> function映射。 用户输入采用形式[action] [entity]。在Room使用实体名称返回合适的Entity对象,然后使用操作名称来找到正确的功能,并执行它。 为了生成房间描述,每个Room对象显示其自己的描述字符串,然后附加每个的描述字符串Entity。该Entity描述可基于其状态(“门被打开”,“门关闭”,“门被锁定”,等等)。 问题出在这里:使用这种方法,我需要快速实现的描述和动作函数的数量就一发不可收拾。我的起居室仅在5个实体之间就具有约20种功能。 我可以将所有动作组合为一个函数,并通过if-else /进行切换,但是每个实体仍然是两个函数。我还可Entity以为常见/通用对象(例如门和钥匙)创建特定的子类,但是到目前为止,这还不多。 编辑1:根据要求,这些动作函数的伪代码示例。 string outsideDungeonBushesSearch(currentRoom, thisEntity, player) if thisEntity["is_searched"] then return "There was nothing more in the bushes." else thisEntity["is_searched"] := true currentRoom.setEntity("dungeonDoorKey") return "You found a key in the bushes." end if string dungeonDoorKeyUse(currentRoom, thisEntity, player) if getEntity("outsideDungeonDoor")["is_locked"] then getEntity("outsideDungeonDoor")["is_locked"] := …

3
如何使复杂的AI易于管理?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 过去,我使用有限状态机(FSM)和分层FSM等简单系统来控制AI行为。这种模式很快就会崩溃,也不会导致任何复杂的系统崩溃。 我听说过行为树。它们似乎是下一个显而易见的步骤,但是我还没有看到可行的实现或尚未尝试过。 还有哪些其他模式可以使复杂的AI行为易于管理?

1
基于组件/实体的设计+行为树=>如何集成?
在我当前的项目中,我实现了一个基于组件/实体的系统,基本上遵循了大多数最佳实践,但是这个未定义的领域却存在。 因此,我得到了(略微扩展的)实体,它们基本上是一个intID,一个人类可读的名称,一个std::map组件和一个long“类型指示符”,用于显示存在哪些组件(我enum对所有组件有2的幂类型,并且每当将一个组件添加到Entity时,我都会通过按位操作自动更改该长度,比较此答案)。 然后是Components,也很简单:intID,enum作为组件类型,父Entity指针以及std::map该组件拥有的所有属性。 最后,一些处理实际逻辑处理的系统/管理器。他们首先检查当前处理的实体是否具有匹配的long“类型指示器” =该系统的所有必需组件都已存在。然后,如果需要,它将访问一些属性,并直接调用相应组件中的某些函数或发送一些消息(通过消息分发程序)。 底线:到目前为止,一个相当标准的事件驱动的基于组件/实体的系统与数据驱动的方法相结合(比较,组件没有硬编码的数据变量,而是作为(某些)组件的通用映射组件的/ archetypes将在以后从文件中读取,并且可以选择添加其他数据,这不是实际组件代码的一部分。 现在,我还要在该项目中引入“ 行为树”(基于AiGameDev BTSK),但是我不确定是否以及如何将它们链接到现有组件,或者通常如何集成这些设计。 我想到了几个相关的想法/观点/问题: 我的BT将再次从文件中读取。目前,我很难理解如何最好地BT Action在该树中的a和应用程序中的实际编码之间建立联系。是否应该在BT文件中使用的动作名称和指向实际逻辑实现的函数指针之间建立某种映射?解决该问题的通常方法是什么? 我假设我必须为所有不同Entity类型创建BT (因此,对于我多次提到的长“类型指示器”所指示的每种与游戏逻辑/人工智能相关的组件组合)。结果,将BT Action实现放入组件中没有意义,因为每个动作很可能会涉及许多组件,不是吗? 那么BT Action逻辑是否应该位于一个/多个单独的系统中(想法1的映射所指向的系统指向的方法)?然后,系统将根据我的long“类型指示器” Entity检查当前是否已检查BT并被告知执行特定操作(=系统中的方法)的BT(实际上具有必需的组件)。但是,如果不是这样(例如,因为BT创建者确实忽略了特定情况,即在运行时可能不再将必要的组件附加到Entity),则什么都不会发生。 问题: 是否有经过验证的集成概念? 您对我上面的三点有何看法? 在我的基于组件/实体的设计方面,还有其他需要考虑的事情吗?

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.