教程七:如何刷兵,如何删除出来的刷兵
此游戏只能同时拥有64个单位,确实少了点。以上内容是能编辑小规模战争mod。
但是学了此章后,你能把场面放大无数倍,可以制作出面对成百上千敌人的超级大场面。
可以制作绚丽的海滩登陆。
可以率领25辆99式坦克面对200辆M1坦克的超级坦克大对轰。
还可制作数十辆武装直升机飞过头顶的震撼效果!!!
可以制作出绚丽的桥头保卫战,村庄保卫战等等
在学习此章之前,我们先来了解下地区:,位置在右上角的system里面可以找到。
如图:
这个东西主要是用于:某单位进入该地区时发生什么事。
多用于刷兵,删除刷兵,触发任务完成等。
代码为:function onEnter(zoneName, unitName)
来个例子:
首先拖动的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这个实体里的单位在游戏一开始是不会出现的)
在地图上拖一个地区,再拖一个兵命名为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必须要学会。
本章说到这里结束了,希望大家多多练习,作出超级大战场来给我玩^_^
这章稍微有点难度,有什么困难可以联系我,大家一起讨论。