欢迎光临散文网 会员登陆 & 注册

新元的无名杀扩展教程(一)技能_9 filter进阶,分支语句

2022-12-09 19:01 作者:新元noname  | 我要投稿

引子

在前面几期中,我们已经了解做一个简单技能的要素,而在接下来的几期中我们将继续深入对技能的编写。

我们首先了解了几种技能的基本格式,然后我们了解了一些语法和算法,在第8期中,我们讲了一系列的函数。

知道了这些后,我们将进一步了解更多的filter和content的相关内容。


filter

对于一个触发的事件,如:

trigger:{

    player:"damageEnd"

},

我们希望它满足一定条件才触发,这就要用到filter

就像进行物质提纯一样,我们要的物质通过了,而我们不要的物质被阻挡了;

而在这里,满足一定条件的触发通过了,我们不要的触发被阻挡了。

这就是filter过滤器的作用。

在技能这一object当中,filter是一个函数,触发事件时,就会调用它。

而它会用return语句设置返回值,返回值为true就执行,反之,不执行。

接下来我们来讲讲return以及返回值


return

我们知道,filter当中有一个return的语句,这个return就是返回,而它后面内容就称为返回值。

例如,

return false

返回值就是false

任何一个函数都有返回值,写不写return语句都有,只是不写return语句时,返回值默认为undefined,而return语句后不填时,返回值也为undefined

那返回值怎么用呢?

可以这样理解返回值:

当一个函数被调用后,它会执行一串代码,代码执行结束时,该函数就会变为返回值。

比如,这里有一个名为MyFunc的函数

function(){

return 1

}

我们调用这个函数:

MyFunc()+1

函数执行完毕后,这段调用语句就变成了

1+1

return还有一个作用就是终止该函数的执行,一旦执行到return的语句,函数就执行完毕。

比如,有一个函数

function(){

return "how"

return true

}

该函数的返回值就为"how",而非true

总结一下,return有两个作用

1.设置函数的返回值

2.终止函数执行


分支语句

当我们限制条件比较少时,我们用一个return就可以实现目的

return 条件1

注:此处条件1是一个计算式,计算的结果是true或false,或者是一个变量,其值为true或false

两个呢?

return 条件1&&条件2

勉强可以接受

如果是要:满足条件1且满足条件2,或满足条件3才发动呢?

return (条件1&&条件2)||条件3

似乎有些麻烦了。

这里介绍分支语言,以方便filter的书写

if-else语句

if语句的写法是:

if(条件){

执行的语句

}

比如,filter中有语句:

if(player.hp>3){

return false

效果为,技能拥有者体力值>3时,返回值为false。

if中的满足条件时,if后的代码就执行,否则,不执行。

这种单if语句只有一个分支。

而双分支的语句为:

if(条件){

执行的语句

} else{

执行的语句

}

也举一个例子:

filter中有

if(player.hp>3){

return false

}else{

return true

效果为,技能拥有者体力值>3时,返回值为false,否则返回值为true。

当if中的条件满足时,则执行if后的代码,否则执行else后的代码

而三分支语言则是

if(条件1){执行的语句}

else if(条件2) {执行的语句}

else if(条件3){执行的语句}

else if(条件n){执行的语句}

else{执行的语句}

这里是先看if中的括号是否满足,否则向下看else if 中括号的条件,若else if中括号的条件均不满足则执行else的语句

还是那个例子:

if(player.hp>4){return flase}

else if(player.hp==3){return true}

else if(player.hp==1){return true}

else{return flase}

玩家体力值大于四,返回值为false,为3,返回值为true,为1,返回值为true,其余的情况返回值为false。

简而言之,单分支语句用if,双分支语句用if-else语句,多分支用if-else if-else语句;if条件满足则执行,否则执行else。


在一般情况下,我们只需要判断if小括号的条件是否满足,就可判断if后语句是否执行。

而我们可以理解为它是这样完成效果的:

第一步,将if小括号中的语句变成true或者false。

如>,<,==,===,它们的计算结果本来就是true或false,算完就走到了第二步。

而如果是非bool的数据类型,则按一定规则变成对应的bool,再走第二步。

规则如下:

0,-0,NaN,''(空字符串),undefined,null→false

其余的数据→true

第二步,如果是if(true){}则执行if后的语句,否则if(false){}则不执行。

即:

if(false){

return true

return flase 

会返回false

if(0){

return true

return false  

会返回false

if(NaN){

return true

return false  

会返回false

if(undefined){

return true

return false  

会返回false

if(null){

return true

return false  

会返回false

而:

if(1){

return true

return false  

会返回true


除了if-else分支外,还有switch分支,这里不做介绍。


分支语句的用法

那么,分支语句怎么用呢?

设想以下情况:

司马懿被闪电劈中了,但是被救回来了。

这时,我们触发了受到伤害的事件,但根据技能描述,由于没有伤害来源,技能是不会发动的,此时就要用filter了。

那么filter怎么写了?

filter函数调用后,此时的情况应该是false,其余的情况则是true。

即:


如果(伤害来源存在) 返回 false

返回 true


那么伤害来源不存在怎么表示呢?

就是判断它是否为undefined

即:

filter:function(event){

if(event.source==undefined) return false

return true

},

此外,还有进阶的写法,由于if语句执行时,它先会将()中的内容转化为bool。触发时,无伤害来源,就转化为false;有伤害来源,就转化为true

完全可以这样写:


filter:function(event){

if(event.source) return true

return false

},

有伤害来源,返回true,无伤害来源返回false

即:


filter:function(event){

if(!event.source) return false

return true

},


我们可以直接这么理解第二种写法,该if语句的条件就是要否定(!)伤害来源(event.source)的存在,即无伤害来源。

!→无,event.source→伤害来源



新元的无名杀扩展教程(一)技能_9 filter进阶,分支语句的评论 (共 条)

分享到微博请遵守国家法律