|
函数的定义:
我们在小学时就已经懂得下面这个公式:
x+1=y
小学时管它叫方程,到了高中管它叫函数,那么,如果把这个函数放在Jass中表达,就应该是:
[codes=jass]function sample takes integer x returns integer
local integer y = x + 1
return y
endfunction[/codes]
无论是哪种写法,他们的作用都是一样的,只是计算一下x+1的值。可能有人很快就发现,y在这里是完全没必要存在的,因为一旦x的值确定,y也就确定了,因此我们可以把写法变换一下:
f(x) = x+1
这是高中时函数的惯用写法,同样地,在Jass里可以写成:
[codes=jass]function sample takes integer x returns integer
return x + 1
endfunction[/codes]
这就是Jass函数的基本概念,可见它和我们平常所用的数学函数并没有本质的区别,是一系列运算的集合。现在我们测试一下:
[codes=jass]call BJDebugMsg( I2S( sample(1)*sample(1)))[/codes]
这里我们使用了3个函数,sample(1)的工作是计算1+1,sample(1)*sample(1)自然=4,然后I2S()函数把整数4转换成字符串"4",最后BJDebugMsg()函数把"4"在屏幕中打印出来。
于是函数运行的结果是在屏幕中出现一个白色的 4,因此可以说在Jass中,各种运算是以函数为基础的,使用Jass的过程,便是不断调用函数的过程。
更妙的是,Blizzard公司已经为我们准备好了很多基础函数,这样我们可以很容易地调用游戏中的各种资源。
下面我们看一个函数在技能中的应用,这个技能是我们很熟悉的“野蛮冲撞”,它能使施法单位在一定时间内迅速冲向前方。
[codes=jass]
//******************************************
globals
timer udg_unitrushtimer = CreateTimer()
unit udg_caster
integer udg_bounces = R2I( 1000.0/30.0 )
real udg_angle
endglobals
//******************************************
//核心函数部分:
function UnitRush_Effects takes nothing returns nothing
local real dx = GetUnitX(udg_caster) + 30.0*Cos(udg_angle)
local real dy = GetUnitY(udg_caster) + 30.0*Sin(udg_angle)
if udg_bounces == 0 Or GetUnitState( udg_caster, UNIT_STATE_LIFE ) == 0.0 then
call PauseTimer( udg_unitrushtimer )
set udg_caster = null
else
call SetUnitPosition( udg_caster, dx, dy )
endif
endfunction
function UnitRush takes unit caster returns nothing
set udg_caster = caster
set udg_angle = GetUnitFacing( caster ) * bj_DEGTORAD
call TimerStart( udg_unitrushtimer, 0.05, true, function UnitRush_Effects )
endfunction
[/codes]
你会惊叹,一个貌似复杂的技能,它的核心部分函数是那么的简单,的确,这就是Jass的强项 -- 简化工作,你仅需要使用以下语句:
[codes=jass]call UnitRush( GetTriggerUnit())[/codes]
就可以使一个触发单位勇猛向前冲,无论在任何时候。它的原理也同样简单明了:
每 0.05 秒,把 udg_caster 向着其面对的方向移动 30.0 的距离。当移动距离大于 1000.0 或单位死亡的时候,停下计时器。这就是上面函数所表达的全部意思。如果你有一定英语基础,应该不会费多大力气就能明白,当然,如果英语不好,可以查查字典。
如果你能看懂上面全部内容,那么你可以很大声地和任何人说,你已经学会Jass了,Jass并不是高深莫测的东西。但你可能不禁会问,既然我已经懂得了Jass,为何还是不会做技能呢?这是因为,Jass只是一个死的工具,就象一支铅笔,无论你对铅笔有多熟悉,不是画家的你依然画不出精彩的图画。要学会画画,你唯一可以做的是拿起笔拼命地画,制作技能也是同样道理,你只有不停地实践,才能很好地掌握技能制作的技巧。 |
|