赞 | 3 |
VIP | 41 |
好人卡 | 0 |
积分 | 82 |
经验 | 36779 |
最后登录 | 2014-7-7 |
在线时间 | 971 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 8199
- 在线时间
- 971 小时
- 注册时间
- 2010-10-10
- 帖子
- 2777
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
最近在复习准备一波带走上半学期的期考卷
我会给出一些自己的经验,也就是AI解决方法,你看看哪些能用的就试试看,我也没底
设角色为A,敌人为B
AI优先度抉择
“若B与A的X距离<10,移动速度3,向x移动2距离=3”
“若B与A的Y距离<10,移动速度3,向y轴移动2距离=4”
“若B与A的X距离为10,Y距离为10,向坐标bx-10,by-10发动火焰攻击=5”
因而当A与B的距离为10,10时,B会立即释放火焰攻击
这个时候尽量广泛的去思考可能会遇到的设计问题,比如“要是B在x,y轴的移动中碰到了石头,怎么办?”
像这类问题“被卡住”“释放火球的指令已下,但MP不足”这种问题都属于自然限制类
解决方案
A.关卡设计,数值设计的时候考虑这些问题 ,比如别在地图上放障碍物,比如设计比技能释放消耗多一万倍的MP
B.直接跳过这些结算,比如无限MP,比如飞行单位
C.在一个事件执行后设立一个逆向的执行逻辑做为检查方法,比如“若B与A的X距离<10,移动速度3,向x移动。检查当前坐标x轴-2是否等于原先坐标,检查有效移动数,则有两种可能(。◇B),(◇B。),前者为有效移动数0,B直接被卡住,后者为有效移动数1被卡住;导出剩余有效移动数到y轴移动,再进行结算;然后Y轴移动也被卡住了那就再导到X轴这边搞个“若剩余有效移动数>0则继续循环”(大菠萝2的方法),或者直接开挂吧,穿墙之类的东西就是这么来的。”查查广度优先搜索算法,或者A*算法,借鉴思路
D.准备多个解决方案,被卡住就瞬移,没MP就吸玩家的HP来补充,硬性软性的都可以
E.放弃某个功能,执行另一个功能。比如B被卡住了没关系阿那就直接丢远程AOE好了,丢着丢着玩家就自己过来了;比如B没MP了那没关系消耗HP发技能,或者干脆就放弃这个功能好了。
F.执行关联事件,比如自己无法移动了那就把有效移动数送给其他队友,比如自己没MP了那就搞个什么休眠技能睡一觉起来之后MP全满
G.控制玩家的选择集。B不能移动了那就把玩家拖到自己面前,或者发个技能烧塌可供移动的地板,让玩家可活动区域更加接近B,自己没MP了就搞个什么机制逼玩家也不能用MP(AI太傻那就让玩家和电脑一起变傻)
H.无以伦比的收益。B没法移动或者没MP了,这下可好,玩家强大了,可以卡位虐BOSS之类的了;那好,如果B收到了限制,那就让它进入暴走状态攻击力加倍,或者直接隐形啊召唤大批小怪什么的吧(一般把B变得难以击败能让人感觉到“哦这AI好厉害”)
你也可以看看编程人员是怎么解决一些问题的
http://blog.whhpaccp.com/?post=516
主要就是分清AI的执行主次顺序,别搞什么复杂功能,用简单的功能堆出复杂效果来。简单来说,AI接受观察到一个状态,现在是什么情况;然后运算所有可能做出的行为结果;接着衡量轻重;最后执行
准备多个行为模式,让AI随时能够调用,是最实用的了 |
|