行为树

行为树行为树常被用来实现游戏中的AI。每次执行AI,都会从根节点遍历整个树,父节点执行子节点,子节点执行完后将结果返回父节点。下面是基本的四个节点:1*顺序节点(Sequence):属于组合节点,顺序执行

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺


行为树常被用来实现游戏中的AI。每次执行AI ,都会从根节点遍历整个树,父节点执行子节点,子节点执行完后将结果返回父节点。下面是基本的四个节点:


1 *顺序节点(Sequence):属于组合节点,顺序执行子节点,只要碰到一个子节点返回false,则返回false,否则返回true,类似于程序中的逻辑与。
2 *选择节点(Selector):属于组合节点,顺序执行子节点,只要碰到一个子节点返回true,则返回true,否则返回false,类似于程序中的逻辑或。
3 *条件节点(Condition):属于叶子节点,判断条件是否成立。
4 *执行节点(Action):属于叶子节点,执行动作,一般返回true。

关于更多关于行为树概念上的东西,大家很容易找到相关的资料,这里不再最赘述,主要是通过一个实际的例子来看行为树在AI上的应用。


这是AI文字表达的方式:


如果不是情人节,我们的Avatar将去球场打球,如果是情人节,他将带上一束花去见他的女友,但是他可能没带钱,所以他要先回家拿钱,然后去花店买花,再去
见他的女友,如果女友还在约会地点,则将花送给女友。


下面是用行为树表达的方式:


行为树


上面的图让我们能很容易指导我们的代码编写,我们需要完成所有的叶子节点,然后将他们按照图示,放到相应的组合节点中去,然后不停的遍历整个行为树。


我使用AS3完成了下面的demo,去实现上图中的行为树AI(如无法观看请下载最新的FlashPlayer)。


Flash中,蓝色的圆表示AI控制的Avatar,你可以通过点击不同选择框来改变当前的条件,Avatar会根据条件做出不同的反应。

行为树很适合做AI编辑器,我们定义好一些条件和动作,策划人员通过简单的拖拽和设置即可实现复杂的游戏AI。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/166875.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • (翻译)什么是Java的永久代(PermGen)内存泄漏

    (翻译)什么是Java的永久代(PermGen)内存泄漏转自:http://www.codelast.com/本文是我对这篇文章的翻译:WhatisaPermGenleak? 为了便于阅读,我将原文附于此处,翻译穿插在其中。此外,为了防止原链接在未来某一天失效后,文中的图片再也看不到的问题,我将原文中的图片也保存到了本站的服务器上,我不知道原作者是否允许这样做,但我翻译本文仅在于传播知识的目的,在此向原作者表示深深的感谢:感谢你

    2022年6月29日
    35
  • 常用频率频段_常用频段

    常用频率频段_常用频段无线图像传输的常用频率介绍 无线图像传输-常用频率介绍GSM900/1800双频段数字蜂窝移动台核准频率范围: Tx:885~915MHz/1710~1785MHzRx:930~960MHz/1805~1880MHz 说明: 1800MHz移动台传导杂散发射值:1.710~1.755GHz≤-36dBm1.755~12.75GHz≤-30dBm GSM900/180

    2025年8月13日
    3
  • pandas apply() 函数用法

    pandas apply() 函数用法理解pandas的函数,要对函数式编程有一定的概念和理解。函数式编程,包括函数式编程思维,当然是一个很复杂的话题,但对今天介绍的apply()函数,只需要理解:函数作为一个对象,能作为参数传递给其它函数,并且能作为函数的返回值。函数作为对象能带来代码风格巨大的改变。举一个例子,有一个包含1到10的list,从其中找出能被3整除的数字。用传统的方法:defcan_divi…

    2022年6月22日
    28
  • php curl header设置参数[通俗易懂]

    php curl header设置参数[通俗易懂]header中的三种方式$header=array(‘Content-type:application/x-www-form-urlencoded;charset=UTF-8’);$header=array(‘Content-type:application/json;charset=UTF-8’);$header=array(‘Accept:application/json…

    2022年7月27日
    68
  • 如何理解线程

    如何理解线程

    2021年10月3日
    32
  • 深度剖析原理!java培训网课代理[通俗易懂]

    深度剖析原理!java培训网课代理[通俗易懂]前言想必很多人在为接下来的金九银十做准备,或许你只是想找到一份工作,亦或许你希望通过今年最后这波拿到一个理想的工作和薪酬。不管是哪一种情况,你都需要提前做好准备,而不是临时抱佛脚。LZ为大家分享的这些面试真题一定要基于自己的技术栈来思考,而不是背一下就觉得这个我会了。试想一下,如果面试官接着往深处问,你能保证自己回答的上来吗?这样的跳槽方式在以前或许还比较适用,但是在今年一定是没有效果的,没有意义的。LZ把这350道Java面试真题分成了五大专题,分别是:性能优化、微服务架构、并发编程(高级)、开源框

    2022年7月7日
    22

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号