攻略详情

《闪点行动2:龙之崛起》任务编辑器教程

作者: 佚名 2013-01-23 17:39

教程七:如何刷兵,如何删除出来的刷兵

此游戏只能同时拥有64个单位,确实少了点。以上内容是能编辑小规模战争mod。
但是学了此章后,你能把场面放大无数倍,可以制作出面对成百上千敌人的超级大场面。
可以制作绚丽的海滩登陆。
可以率领25辆99式坦克面对200辆m1坦克的超级坦克大对轰。
还可制作数十辆武装直升机飞过头顶的震撼效果!!!
可以制作出绚丽的桥头保卫战,村庄保卫战等等

在学习此章之前,我们先来了解下地区:

《闪点行动2:龙之崛起》任务编辑器教程

,位置在右上角的system里面可以找到。
如图:

《闪点行动2:龙之崛起》任务编辑器教程


这个东西主要是用于:某单位进入该地区时发生什么事。
多用于刷兵,删除刷兵,触发任务完成等。
代码为:function onenter(zonename, unitname)
来个例子:
首先拖动

《闪点行动2:龙之崛起》任务编辑器教程

《闪点行动2:龙之崛起》任务编辑器教程

在地图上,把

《闪点行动2:龙之崛起》任务编辑器教程

的name命名为zone然后再拖一个兵并把该兵的name命名为han并设置为player.
放好后,点击标题栏的level.lua
输入以下代码:
function onenter_zone_han(zonename, unitname)
ofp:missionfailed();
end
意思是:当han这个单位进入zone这个地区时
触发总任务完成
效果:
当玩家操作han这个单位进去zone这个区域则弹出任务完成菜单,游戏胜利。
很简单吧。
好了现在我们对地区已经了解了。
现在我们就利用地区这个工具来制作刷兵。
在此之前我们先了解为什么要刷兵。
这里在罗嗦下这个编辑器只能支持64个单位在地图上,这明显限制的游戏的规模,但是我们可以在64个单位死后,再刷出新的兵,这样我就能把战斗做到无限大!不过注意一个地图上同一时间只能有64个单位,不然刷不新的兵来。
刷兵语句:ofp:activateentityset();
好我们来例子:
例1:
首先点击 右侧create栏右边的explorer
在 entety sey view 目录下面空白处点一下(防止建在根目录里) 再选择+ add entity set
增加一个entity set 我们这里他命名为e1.单击e1灰色目录图标打勾,
然后再右键e1选exportable 最后图标就是一个黄色打勾的目录.
这样我们就建立了个实体。
然后拖动一组兵到地图上在属性界面里的modify里的entity set 里选择刚
才创建的e1。命名为bin1
现在这组兵事e1这个实体里的单位。
那么我们要实现刷兵就必须触发这个实体(e1这个实体里的单位在游戏一开始是不会出现的)
在地图上拖一个地区

《闪点行动2:龙之崛起》任务编辑器教程

命名为:zone,再拖一个

《闪点行动2:龙之崛起》任务编辑器教程

,再拖一个兵命名为han设置成player。点击level.lua输入以下代码:
function onenter_zone_han(zonename, unitname)
ofp:activateentityset("e1");
end意思是:
当han这个单位进入zone这个区域时
触发刷实体e1
那么我们知道刚才的bin1是在实体e1中,那么触发e1也就实现了bin1的出现。
效果:
当han进入zone这个地区时,bin1刷出来!
哈哈哈哈哈哈是不是超级简单。不过要注意刷出来的兵或者说实体e1里面的单位必须要有小队队长。不然会出错。
好了我们再来学习删除刷兵。
代码为:ofp:destroyentityset();
为什么要删除刷兵?
那么一队敌人远离你1公里,这队敌人也没办法追上你,那么我就可以把这个小队删除,释放出内存给其他的单位!真正实现大规模的战斗。
我们继续以例1来讲解。
再拖动一个地区到地图上00命名为shanbingzone
现在地图上有两个地区00分别为zone和shanbingzone,一个han兵,一个bin1,和一个level.lua
我们点击level.lua
输入以下代码:
function onenter_zone_han(zonename, unitname)
shuabin1=ofp:activateentityset("e1");
end
function onenter_shanbingzone_han(zonename, unitname)
ofp:destroyentityset(shuabin1);
end
代码的意思是:
当han这个单位进入zone这个区域时
shuabin1=触发刷兵e1实体

当han这个单位进入shanbingzone这个地区时
触发删除shuabin1这个变量。

我们来讲解下:
shuabin1=ofp:activateentityset("e1");这段代码和例1有所不同,这里必须把ofp:activateentityset("e1")赋值给shuabin1才能执行后面的消除刷兵。shuabin1这个变量可以取自己容易记的名字。
再看下面:
ofp:destroyentityset(shuabin1);为触发删除刷出来的兵。
看到了把后面括号里是(shuabin1)而不是e1。如果是e1的话则代码不能出现效果,切记.那么这里删除了shuabin1也就删除了e1这个实体也就删除了bin1这组兵。(注意格式(shuabin1)没有双引号)
效果:
当han进入zone时刷兵,当han进入shanbingzone时删除刚才所刷的兵.
呵呵 也很简单把
不外乎把刷兵的触发效果给他赋值个变量,在删除刷兵的时候只要删除这个变量就可以了。
休息下继续。。。。。。。。。。。。。。。。。。。。
但是细心的同学又发现了
上面这个例子,当han单位进入zone这个地区刷兵,然后进去shanbingzone这个地区删除刷出来的兵,但是当han再进入zone这个区域时又刷兵了,这明显不是我们设计的本意。
那么我们该如何只让zone这个区域只刷一次兵,以后再进入zone地区时不再刷兵呢。
我们就必须加入判断。
例3
来看代码:
function onmissionstart()
panduan1=0;
end

function onenter_zone_han(zonename, unitname)
if panduan1==0 then
shuabin1=ofp:activateentityset("e1");
panduan1=1;
end
end

function onenter_shanbingzone_han(zonename, unitname)
ofp:destroyentityset(shuabin1);
end

很好理解把
在游戏开始的时候设置个变量panduan1=0。
当han进入zone时,先判断panduan1是不是0后才刷兵。
当触发刷兵后让panduan=1,则以后再进入zone地区时因为panduan=1所以不会再刷兵了。
当然对于例3的功能还有更简单的办法:
function onenter_zone_han(zonename, unitname)
shuabin1=ofp:activateentityset("e1");
ofp:disableevent("onenter_zone_han") ;   --消除该触发器,也可以达到例3的效果,且更简单方便,不需要变量来判断。
end

function onenter_shanbingzone_han(zonename, unitname)
ofp:destroyentityset(shuabin1);
end


我们来个牛的例子
例4:
假设我们有实体e1和e2还有兵若干,地区4个分别为zone,zone1和shanbingzone,shanbingzong1玩家han.
代码为
function onmissionstart()
panduan1=0;
panduan2=0;
end

function onenter_zone_han(zonename, unitname)
if panduan1==0 then
shuabin1=ofp:activateentityset("e1");
panduan1=1;
end
end
function onenter_zone1_han(zonename, unitname)
if panduan2==0 then
shuabin2=ofp:activateentityset("e2");
panduan2=1;
end
end
function onenter_shanbingzone_han(zonename, unitname)
ofp:destroyentityset(shuabin1);
end
function onenter_shanbingzone1_han(zonename, unitname)
ofp:destroyentityset(shuabin2);
end
意思是:
当han进入zone时
触发刷e1
当han进入zone时
触发刷e2
当han进shanbingzone时
触发删除e1
当han进入shanbingzone1时
触发删除e2
以上代码刷兵区域只能刷1次兵
效果:略
值得注意的是一次刷兵判断时,变量只能用一次
function onenter_zone_han(zonename, unitname)
if panduan1==0 then
shuabin1=ofp:activateentityset("e1");
panduan1=1;
end
end
function onenter_zone1_han(zonename, unitname)
if panduan1==1 then ╠╠用了同一个变量,错误
shuabin2=ofp:activateentityset("e2");
panduan1=2;╠╠错误end
这样写是错误的,所以我们必须有panduan1=0;和panduan2=0;两个变量来判断刷兵。切记!!!!!

要做大规模战斗例4必须要学会。
本章说到这里结束了,希望大家多多练习,作出超级大战场来给我玩^_^
这章稍微有点难度,有什么困难可以联系我,大家一起讨论。

          

上一篇 : 《模拟人生3 ...

下一篇 : 《无双大蛇Z ...

相关阅读

精彩推荐