塔防游戏的技术总结--行为树
记录一次实际使用行为树。
首先是行为树库的问题。
一般情况先看看有没有优秀的,现成的库能使用,上GitHub搜索一下,找一些相关的,star比较多的。当然你也可以自己编写,看实际情况了。
采用的是behavior3,还有相应的编辑器,比较方便。地址:behavior3/behavior3editor
GitHub不好下载,Gitee可以转GitHub的链接,下载就方便了。
编辑器的问题
下载好behavior3editor相关的文件,文件长这样,behavior3editor-master.zip,解压后,文件夹里面有个BUILD.md,可以自己编译出web版的编辑器,也可以网上下载一个。编辑器的基本介绍,地址:塔防游戏的技术总结--行为树编辑器_SHIYULF的博客-CSDN博客
介绍行为树的文章,网上有很多, 这里就不赘述了。
游戏AI之决策结构—行为树 - KillerAery - 博客园 33
AI 行为树的工作原理 | indienova 独立游戏
大概概括一下行为树的流程:
逐帧执行所有行为树,每次tick时间内,每个行为树从根节点开始,根据行为树的树状结构,遍历各个子节点;根据4种类型的节点(Composites组合节点、Decorators装饰节点、Actions行为节点、Conditions条件节点),去控制行为树的走向,决定节点是否会执行;节点执行的结果会返回给父节点,父节点也可以做想要的逻辑,去控制流程走向。
比如现在有个案子,地图中若干出兵的营地,地图中间有个泉水,1个特殊怪物会逐个攻击出兵营地,然后飞到泉水,然后放技能,飞到落地点,往下一个出兵营地寻路几秒钟,遇到敌对怪物就攻击,时间到了起飞,飞到出兵营地,攻击营地,攻破营地,再飞到泉水,就这样直到所有营地全部攻破,飞到泉水就胜利了。
首先是动态路径,new一个新的Action,根据起点和终点,寻路算法,可以获得1份怪物要走的路径,但是不能一直去执行这个,只能执行1次。
那么能不能加一个东西,让上面的动作只执行1次,或者说控制执行次数。根据行为树4种节点的区分,Decorator修饰节点比较合适,new一个新的Decorator,修饰上面的节点,动态路径的action执行成功,就不再执行了。通过查看库里面已经有的装饰节点,会发现节点有一段这样的代码
let status = this.child.execute(tick);
那我们就可以控制子节点的执行,和对子节点返回的状态,再进行相应的处理。基本思路也就有了,根据子节点执行成功的次数,和我们设定的次数做比较,小于就执行子节点,大于等于就直接返回状态,不再执行子节点。
Inverter的修饰节点很常用,把子节点的状态反转。
当然还要有技能释放的action,移动的action,游戏中要有相关的系统支持才可以。
那这样是不是就行了呢,好像不是太完整,1个问题是会不停的跑技能释放的action,技能释放是有条件的,没必要一直检测技能是否能释放,等飞到目的地兵营再检测也来得及,同时还少跑了检测技能释放的复杂逻辑,那再new一个新的Node,检测是否到了目的地,那么是设置成Action还是Condition呢。Condition会好一些,因为就是为了给释放技能加个前提的条件。
特殊怪物飞到第一个兵营,攻破兵营之后,怪物会飞到地图中间的泉水,开始后续的逻辑。仔细看案子会发现,从现在开始,后面的流程开始出现重复了。都是飞到泉水,放技能,飞到落地点,向下一个兵营寻路,寻路中间遇到敌对怪物就进行攻击,一定时间起飞,飞到兵营,攻破兵营 ,再飞到泉水。
好了,我们也可以像上面的那样的分析,拉出很多的选择分支,但是会分支很多,控制起来就比较麻烦。后续的不是重复了吗,那我们能不能写出一个完整的流程,然后也循环重复呢。
先写出一个完整的循环体流程。
我们在玩一些稍微大型的游戏,打Boss的时候应该听说过,Boss进入了第几阶段,那么根据这个,我们也借鉴一下,new出一个新的Decorator,和设置阶段状态的action,配合控制阶段action,一旦设置阶段完结,阶段的子节点不再执行。这个对后面行为树复杂起来的时候,方面了不少。
阶段限制的装饰节点有了,设置阶段状态的action也有了,那什么时候设置状态呢。我们还需要一个条件,根据案子的描述,目标建筑是否存在,比较合适,new一个新的Condition。
第一阶段的行为树。
那么第一阶段完成之后,Limit0Stage之后的所有逻辑,后续不再执行了。
先处理一下,攻破所有的兵营后,要飞到泉水中间。这个不会进入循环体中,可以先处理。
现在设置循环体的逻辑。
后面的逻辑中,设置寻路路径,是否到达目的地,目标建筑是否存在,这个几个需要动态数据。把兵营相关的数据,已数值的形式存入上述Node中间,后面用1个特殊的action驱动,去动态取想要的数据,就可以达到循环的目的了。
然后在攻破第一个兵营之后,怪物要飞到地图中间的泉水,释放技能,同样的逻辑。
飞到落地点,降落。
向兵营寻路10s中,MaxExecuteTime修饰节点,和上面的加法类似。
飞到兵营,攻击兵营
在4个阶段上面,还有一个自动驱动数据。要熟悉blackboard的用处,根据判断条件,往里面存入动态数组需要的下标,其他需要动态数据的Node,在拿到下标后取出数组中相应的数据即可。
new出的所有新的Node,根据名字,在行为树库中都要有一一的对应,即要新建单独的脚本文件和相应的类。
到此案子的功能,通过行为树如何实现,基本分析完毕了。
塔防游戏的技术总结--行为树相关推荐
- HTML5另类塔防游戏 -『三国战线』发布
关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战,官渡之战到夷陵之战,夷陵之战到五丈原之战等15个关卡.在每个关卡中,你会控制一名三国武将与出现的敌军 ...
- html塔防游戏,HTML5 版塔防游戏
HTML5 版塔防游戏来自老杰的博客,本人很喜欢这款游戏.就转载到苏岳宁博客里,希望更多的朋友看到试玩这款TD游戏吧!下面是游戏进行时的截图: 下文来自老杰的博客: ---------------- ...
- Unity塔防游戏的制作与实现
一.游戏场景的搭建 首先,我们需要创建一个新的Unity场景,并将场景设置为2D模式.然后,我们需要导入一些必要的素材,如地图.塔.怪物.子弹等.我们可以从Unity Asset Store中下载这些 ...
- [Cocos2d塔防游戏开发]Cocos2dx-3.X完成塔防游戏《王国保卫战》--简介+代码+资源
学校实训项目需要用cocos2dx做一款塔防游戏,因为时间与制图技术.创意原因无法进行原创,碰巧找到了皇家守卫军这款游戏的图片资源,决定用cocos2dx来重现这款经典塔防游戏. 本项目已完成3分之1 ...
- HTML5 塔防游戏分享
使用 HTML5 开发的塔防游戏. 作者语:我比较喜欢塔防类的游戏,前段时间非常流行的植物大战僵尸就属于塔防游戏.最近看到有人用 HTML5 写出了很多非常有趣的作品,我忍不住也尝试了一番,于是有了这 ...
- HTML5另类塔防游戏 -《三国战线》公布
关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...
- 【HMS Core案例分享】华为分析 X 江湖游戏 | 揭秘塔防游戏的增长秘籍
江湖游戏是一家集网络游戏发行.运营和服务于一体的公司,于2018年成立,是国内新兴的游戏发行商之一.江湖游戏凭借着3D欧美卡通塔防巨作<塔塔帝国>,以及诙谐幽默的<泡面三国>, ...
- 开发者已将您从测试计划中移除_深度合作,Ohayoo定制模式为开发者提供更全面的支持|塔防|游戏|休闲游戏|ohayoo|塔防游戏...
Ohayoo和成都这个城市的缘分由来已久.据统计,在过去一年多时间里,Ohayoo为成都地区超过50家开发者提供了产品调优上的建议,与超过20家开发者建立了实质性的合作关系,并储备了待上线产品10余款 ...
- (译)如何使用cocos2d制作一个塔防游戏:引子
原文链接地址:http://www.iphonegametutorials.com/2011/04/11/cocos2d-game-tutorial-how-to-build-a-tower-defe ...
最新文章
- 【数据处理】python数据评估常用指标:ks、fpr、tpr
- php 中set是什么_php中set
- C++原子操作 atomic的使用及效率
- 数列互质(莫队算法)
- 白鹭引擎 - 显示对象的基准点与横纵坐标 ( 绘制一个来回移动的绿色方块 )
- c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
- 企业3级推广报单分销源码下载会员注册管理系统
- Python修饰符--函数修饰符 “@”
- 中芯国际:公司客户需求强劲 订单饱满
- mysql 阿里云 版本_阿里云虚拟主机mysql已经支持版本切换,支持MySQL 5.7.25
- linux下DNS服务器的配置
- HDU1847 Good Luck in CET-4 Everybody!【SG函数】
- linux pe系统下载,WINPE LINUX DOS 完美者U盘维护系统V8.1 正式版
- 大型在线考试答题系统源码 B/S架构
- SDRAM DQM的解释,总算明白了
- SQL Server数据库通过身份证号获取年龄段分布
- 12月29日--Java中有关类与对象的学习记录
- docker重启 容器自动重启
- Python爬虫实战三 | 蓝奏网盘抓取网盘链接信息
- 我对双飞翼布局理解,以及双飞翼布局的好处
热门文章
- 运营商建设免费WiFi是个冷笑话 钱都投给4G了
- JavaScript简单实现随机抽奖案例
- ASP,JSP,ASP.NET,PHP,HTML等软件技术交流群42173344欢迎加入! 2000人超级群
- MPI之点对点通信——阻塞式MPI_Send 和MPI_Recv
- java制作表白软件手机版下载_表白图片制作软件下载-表白图片制作 安卓版v1.0-PC6安卓网...
- 装机员 Ghost Win7 Sp1 64位装机9月版
- 房地产开发流程(详细)
- AE基础教程(9)——第9章 快速预览
- 蓝桥杯题库 算法提高非vip部分(C++、Java)代码实现(251-280)
- 严肃游戏(中山大学3D游戏作业1)