教程八:路径点高级应用
在教程二中已经认识了路径点,那么这里我们对路径点的功能拓展一下
此章我们用三个部分来给大家讲解:
一:如何让刷出来的兵安路径点移动
二:如何让ai防守路径点
三:当达到路径点触发事件
一:我们在学习完教程七的后已经学会刷兵,但是如果喜欢钻研的同学发现,刷出来的兵不会按路径点走,无论你怎么设置路径,他们只是呆呆的站在原地,或者是发现敌人就一拥而上。
现在我们解决这个问题:
例1:
首先我们设置好事体e1(见教程七),拖动一组兵命名为bing1选择实体e1,拖2个地区分别命名为:shuabingzone和yidongzone.在拖3个路径分别命名为:way1,way2,way。并把3个路径相连。拖一个level.lua再来一组兵命名为han选择为player.
现在我们的任务是进入shuabingzone时,触发刷bing1,进入yidongzone时让bing1按路径移动。(哈哈明白了吧,要让刷出来的兵按路径移动,就必须去触发)。
好我们输入以下代码:
function onenter_shuabingzone_han(zonename, unitname)
ofp:activateentityset("e1"); - -刷兵
end
function onenter_yidongzone_han(zonename, unitname)
ofp:move(“bing1”,”way1p”)
end
我们讲解下:第一段没问题,看第二段:当进入yidongzone时触发移动move(“兵的名字”,”路径点名称+p”):
呵呵是不是很简单。
但是请注意ofp:move(“bing1”,”way1p”)这里必须是way1+p而不是way1,这里一定要在路径点名称后面加个p,才能让bing1沿着way1到way2到way3,如果不加p,兵1只会到达way1就不动了。
二:如何让ai防守路径点。
我们要让刷出来的敌人,防守某个路径点,而不是乱跑,或者原地不动
例2:在例1的基础上再加一个路径点命名为fangshouway和一个地区命名为fangshouzone,且该路径点不能和其他路径相连.
我们要让刷出来的兵防守路径点fangshouway.
代码如下:
function onenter_shuabingzone_han(zonename, unitname)
ofp:activateentityset("e1"); - -刷兵
end
function onenter_fangshouzone_han(zonename, unitname)
ofp:defendpos("bing1","fangshouway",10);
end
也很简单
当han进入shuabing地区时触发刷兵,再触发防守。
ofp:defendpos("bing1","fangshouway",10);这里时(“兵名称”,”路径点”,范围/米)
三:当达到路径点触发事件
例如我们有一辆卡车,上面装满了兵,当到达某个路径时触发所有兵下车。
我们再拖一辆卡车命名为kache1,拖一组兵命名为bing2,让bing2装上卡车。在把bing2和路径way1相连。
代码如下:
function onarriveatwaypoint_kache1_way1(entityname, waypointname)
ofp:move("bin1","way1","override");
end
function onarriveatwaypoint_kache1_way1(entityname, waypointname)
ofp:land("bing2");
end
第一段触发移动。
第二段触发下卡车。
严重注意:一个地区zone只能对应一类ofp,
例如:
function onenter_shuabingzone_han(zonename, unitname)
ofp:activateentityset("e1"); - -刷兵
ofp:activateentityset("e2"); - -刷兵
ofp:activateentityset("e3"); - -刷兵
end
这个是正确的,因为一个为地区只对应了触发刷兵,虽然有多个但是是属于同一类。
而:
function onenter_shuabingzone_han(zonename, unitname)
ofp:activateentityset("e1"); - -刷兵
ofp:move("bin1","way1","override");
end
这样是错误的:一个地区不能对应两种类型触发。
再看
function onenter_zone_han(zonename, unitname)
shuabin1=ofp:activateentityset("e1");
ofp:disableevent("onenter_zone_han") ;
end
这样情况例外!这个是正确的shuabin1=ofp:activateentityset("e1");和ofp:disableevent("onenter_zone_han") 属于同一类触发,
好第八章就讲到这里。