隧道施工方法新奥法:怎么用we做魔售地图,给详细的说下?

来源:百度文库 编辑:高考问答 时间:2024/05/01 20:59:37

[技术]Tiveone第一讲 - 使用Jass动态注册事件

[技术]Tiveone第一讲 - 使用Jass动态注册事件
大家好,我是Tiveone,现在以及将来我将为大家讲解一些 WE 的进阶技术
这次为大家讲的是动态注册事件

相信大家有遇见过需要注册大量单位的事件吧!
比如:我要使地图上的所有单位的生命值在小于或等于50的时候,使其无敌。
可解决办法之一就是:将所有单位都在编辑器中创建好,并注册事件。
这方法固然好,却不怎么现实,首先其弊病就是导致地图加载量变大,增加读取时间。并且还会使触发器注册多余的事件。

而另一个方法就是动态注册事件
动态注册事件的好处:没有上述方法的弊病,并且最大限度减少内存占用

废话不多说,直接说实现方法。
事例还是上面所说的那个

首先,我们为写一个模板供需要注册时间的单位使用

//当触发注册的事件时调用的函数
function OnUnitAmort takes nothing returns nothing
//设置触发单位为无敌
call SetUnitInvulnerable( GetTriggerUnit(), true )
//破坏这个触发器,即下面的RegisterUnitAmortEvent所创建的触发器
//这样就不会导致该触发被多次调用,并且还能清理该触发所占用的内存
call DestroyTrigger(GetTriggeringTrigger())
endfunction

//注册模板
function RegisterUnitAmortEvent takes unit witchUnit returns nothing
//创建一个触发器
local trigger rTrg = CreateTrigger()
//为创建的触发器注册事件:当单位witchUnit的生命值小于或等于50的时触发事件
call TriggerRegisterUnitLifeEvent( rTrg , witchUnit, LESS_THAN_OR_EQUAL, 50 )
//注册触发器事件响应后所调用的函数
call TriggerAddAction( rTrg, function OnUnitAmort )
endfunction

模板就完成了,下面我们只需要在游戏中的时候调用RegisterUnitAmortEvent函数注册单位就可以了。
当然,动态注册事件的功能不只于此,只要是需要注册大量重复事件的触发都可以应用,具体就要看个人了。

技术]Tiveone第二讲 - 触发器队列(TriggerQueue)
本节讲解的是触发器队列(TriggerQueue),在这节中,我将为大家详细讲解触发器队列的作用以及如何使用
这个东西大概是许多地图开发者所不了解的东西,其实他的原理很简单
打个比方
有一家包子店,一次只能接待一个客人来买包子
如果同时出现了10个客人来买包子怎么办?
排队!触发器队列的核心就是排队...
上述的包子店就是触发器队列,买包子就是运行触发器
而客人自然就是触发器了
这么说很简单吧
那么我们主要能把触发器队列应用在哪里呢?
应用在某些触发容易发生变量冲突或者是需要连续运行的触发器

需要连续运行的触发器我写了个演示地图,请稍后下载来研究

关于触发器队列(TriggerQueue)的注意事项:
1.最大队列的触发器不能超过100,该值是由Blizzard.j中的常量 bj_MAX_QUEUED_TRIGGERS 定义的
2.每个在队列中的触发器的最后一个动作必须为"Remove Form Trigger Queue",值为 "This trigger",否则将会造成该触发器卡队列中180秒,通俗点说,就是买包子的客人赖在店门口不走180秒。
3.队列中的触发器执行顺序是按先来后到算的,即买包子的人的顺序是先来先买。
4.可以查询当前队列中的触发器数量,查询变量为bj_queuedExecTotal

[技术]Tiveone第三讲 - 使用图象(Image)
本节讲解的是图象(Image),在这节中,我将为大家详细讲解图象这个没用的东西

打开Trigger编辑器。在动作列表中可以发现一个类别“图象(Image)”
他的作用是什么呢?
看游戏里~,单位的阴影、地表的纹理,实际上都是图象
说白了图象其实就是把一张图片贴在地表上

下面我来介绍相关图象的动作的动作:
创建(Create) - 在指定的点创建指定大小的图象,image type代表图层,打个比方,图象是烧饼,那么把N个烧饼堆起来,每一个烧饼就是一层,那么,图层的作用就是设置图象的优先级,让哪一部分显示在哪一层。最顶层的会覆盖下面的其他层。
毁坏(Destroy) - 破坏一个图象,并释放其所占用的资源。
显示/隐藏(Show/Hide) - 显示/隐藏一个图象。
改变允许的高度(Change Constant Height) - 设置图象所允许的最大高度,该值在图象创建时默认为0,高度可以使用动作 改变位置(Change Position) 的Z坐标来调整。
改变位置(Change Position) - 调整图象的位置和高度。
改变颜色(Change Color) - 调整图象的颜色和透明度。
刷新图象显示(Change Render State) - 该动作通常不使用。
总是刷新图象显示(Change Render Always State) - 只有使用该动作设置图象的为允许时,图象才能正常显示。
改变水平状态(Change Above Water State) - 该动作功能未知。
改变图层(Change Type) - 改变图象的图层,关于图层的作用,见"创建(Create)"。

知道了动作的作用,那么要使用图象的功能就很简单了,这里就不做解释了。

最后,我特别强调一点:
创建(Create)有个bug,自Blizzard添加该功能就存在的bug
就是创建的图象的边上有一个256大小的黑块,并且无法消除
这也是为什么图象这个功能没有被广泛使用的原因。
想要使用这个功能,我们只能等待Blizzard修复这个Bug。
该bug可以在我的演示地图中看到。
之所以讲这个东西,是因为有人要求,而且,说不定1.21就会修复这个bug哦,到时候就能让你的地图更多彩了~~

[技术]Tiveone第四讲 - Trackable
本节包含Jass内容,反感者勿入
在WE中有一种隐藏的类型:Trackable
本节我将为大家介绍如何使用Trackable
Trackable实际上和普通单位的区别不大,实际上就是一个模型
一个创建以后不可销毁的模型,用于响应玩家的鼠标事件
以下为在common.j中Trackable的相关函数

native TriggerRegisterTrackableHitEvent takes trigger whichTrigger, trackable t returns event
native TriggerRegisterTrackableTrackEvent takes trigger whichTrigger, trackable t returns event
native CreateTrackable takes string trackableModelPath, real x, real y, real facing returns trackable
constant native GetTriggeringTrackable takes nothing returns trackable

下面说明函数的作用:
TriggerRegisterTrackableHitEvent - 注册Trackable的点击事件,当玩家用鼠标点击trackable对象时,触发该事件
TriggerRegisterTrackableTrackEvent - 注册Trackable的Track事件,当玩家用鼠标从trackable对象上经过时,触发该事件
CreateTrackable - 创建一个trackable对象,必须用一个变量保存该对象,否则你无法使用你创建的对象。trackableModelPath代表你使用的模型路径。
GetTriggeringTrackable - 当触发Trackable的事件时,该值返回被触发的trackable对象

Trackable的好处之一就是可以调整创建的模型的角度,演示地图中就示范了一个这样的用处
推荐大家看看,面向正面的传送门,很不错哦,可以考虑用来做装饰品

另外需要注意的是Blz并没有为我们提供用于销毁trackable对象的函数,也就是说,一旦创建,trackable就会永久性的存在于地图上了 - 直到你退出游戏地图。
所以,使用trackable对象的时候,请慎重考虑
只要使用得当,Trackable是很棒的东西。