教程八:路径点高级应用
在教程二中已经认识了路径点,那么这里我们对路径点的功能拓展一下
此章我们用三个部分来给大家讲解:
一:如何让刷出来的兵安路径点移动
二:如何让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") 属于同一类触发,
好第八章就讲到这里。