怎么用Typescript写类似LayaAir里的Laya.Handler.create调用
layaair吧
全部回复
仅看楼主
level 1
lgfx060223 楼主
苦Laya.Handler.create的回调久矣!再加上现在需要批量判断调用函数,因此打算写一个分条件执行的函数。
代码类似于这样,其中最关键的一部分是类似于Laya.Handler.create里面的执行函数那一句,它的参数列表有长有短,怎样填入那个函数体里面?不会写:
checkBlockLists(readyList:Array<string>,state:string,doFunction:Array<Function>,args:Array<any[]>,once?:boolean) {//对整个缓冲列表进行遍历,如果有任何一个列表满足状态state,则对于该缓冲列表,做处理函数Function,参数列表为args。如果once为true,则找到任意一个列表执行就返回。
for(var i=0;i<readyList.length;i++){
if(readyList[i]==state)
{
Laya.Handler.create(levelController.Instance(),doFunction[i],args[i],once);
// var argList=args[i];
// doFunction[i](argList.forEach);
// //doFunction[i](args[i][0],...,arg[i][arg[i].length - 1]));howTo?
}
2019年11月22日 07点11分 1
level 1
lgfx060223 楼主
通过看Function的定义知道了!写成:doFunction[i](...args[i]);就行
2019年11月22日 07点11分 2
level 1
lgfx060223 楼主
问题又出现了!any[]类型的数组貌似是值传递,不是引用传递,传进函数的args即使刷新成执行了函数以后的结果,args对应的那些值的变量也没有更改。
就是说args这个any[]假如塞成any[number,Array<string>],修改args[0]=1;那么这个number应该也不会更改原先变量值。也就是只要传给any的不是个Array<number>,这下写起来就不美观了。
现在是用把number扔给一个Array<number>传进函数修改再传出来,这样实现“引用传递”,
如果这样,那么在调用的时候就不美观了,需要额外做很多没有重复成函数的操作:把number提前整成个Array<number>然后再传给args,回头再读取这个Array<number>值才行了...
2019年11月22日 10点11分 3
1