教程八:路径点高级应用

+

教程八:路径点高级应用

在教程二中已经认识了路径点,那么这里我们对路径点的功能拓展一下

此章我们用三个部分来给大家讲解:

一:如何让刷出来的兵安路径点移动

二:如何让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") 属于同一类触发,

好第八章就讲到这里。