早起的虫儿 发表于 2019-5-8 15:10:03

怎么在enterframe事件里面添加自定义参数?

如题,怎么在enterframe事件里面添加自定义参数?
每次都要使用全局参数感觉不够灵活。
自行定义timer之类的事件感觉又不好用,没enterframe事件来的快
有没有什么办法重写或者自定义这个事件的参数啊?

general_clarke 发表于 2019-5-8 15:10:04

推荐做法是不使用addEventListener(ENTER_FRAME)
使用链表数据结构自行制作事件流处理机制

例子,下面省略了双向链表的add/remove实现。

public class OEFManager{
public var dic:Dictionary = new Dictionary;
public var chain:双向链表
public function OEFManager(stage:Stage){
    stage.addEventListener(Event.ENTER_FRAME, enterFrame);
}
public function enterFrame(e:Event):void{
    if(chain.firstNode){
      var ptr:节点 = chain.firstNode
      while(ptr){
      var saveNext:节点 = ptr.next//必须在此处保存,ptr.execute可能将ptr自身移除
      ptr.execute();
      ptr = saveNext;
      }
    }
}
public function add(func:Function, args:* = null):void{
    if(!dic){
      var node:节点 = new 节点
      node.callback = func;
      node.callbackArgs = args;
      chain.add(node);
      dic = node;
    }
}
public function remove(func:Function):void{
    var node:节点 = dic;
    if(node){
      node.remove();
    }
}
}
public class 节点{
public var prev:节点
public var next:节点
public var callback:Function;
public var callbackArgs:*;
public function execute():void{
    if(callback.length == 0){
      callback();
    }else{
      callback(callbackArgs);
    }
}
}

TKCB 发表于 2019-5-8 18:59:38

没看懂,你想做什么

general_clarke 发表于 2019-5-8 23:32:37

本帖最后由 general_clarke 于 2019-5-8 23:40 编辑

然后是一个利用闭包实现的投机取巧做法。



public function testFunc():void{
var args:String = "要传递的参数";
stage.addEventListener(Event.ENTER_FRAME, function callback(e:Event):void{
      trace(args);
    });

}


如果使用这个闭包写法,在removeEventListener解除对闭包引用之前,
闭包的父函数,也就是testFunc()内的局部变量不释放。
在较大项目或较长函数中慎用,可能导致内存问题

general_clarke 发表于 2019-5-8 23:39:38

闭包实现第二种,比上一个安全。



addEventListener(Event.ENTER_FRAME, function 壳(e:Event):void{
真正要回调的函数(e, "我是参数");
})

public function 真正要回调的函数(e:Event, args:*):void{
}



经常使用的话,比起每次想闭包写法还是应该编写管理器。

强烈推荐前面一种写管理器的写法,
一劳永逸,之后也容易进行扩展,比如“暂停所有ENTER_FRAME事件”、"ENTER_FRAME事件分组并根据功能排序"、"功耗统计"等

早起的虫儿 发表于 2019-5-9 15:54:41

general_clarke 发表于 2019-5-8 23:39
闭包实现第二种,比上一个安全。




谢谢大哥,第二种的稍微能看懂,第一种略显复杂啊,要用字典什么的,我再仔细看看,感谢。

早起的虫儿 发表于 2019-5-9 15:55:52

TKCB 发表于 2019-5-8 18:59
没看懂,你想做什么

就是enterFrame事件本身不是只有一个event参数吗?我想加一些自定义的参数用来做一些动画效果
可能是我描述不清楚,感谢T大回复
页: [1]
查看完整版本: 怎么在enterframe事件里面添加自定义参数?

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)