怎么在enterframe事件里面添加自定义参数?
如题,怎么在enterframe事件里面添加自定义参数?每次都要使用全局参数感觉不够灵活。
自行定义timer之类的事件感觉又不好用,没enterframe事件来的快
有没有什么办法重写或者自定义这个事件的参数啊?
推荐做法是不使用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);
}
}
}
没看懂,你想做什么 本帖最后由 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()内的局部变量不释放。
在较大项目或较长函数中慎用,可能导致内存问题 闭包实现第二种,比上一个安全。
addEventListener(Event.ENTER_FRAME, function 壳(e:Event):void{
真正要回调的函数(e, "我是参数");
})
public function 真正要回调的函数(e:Event, args:*):void{
}
经常使用的话,比起每次想闭包写法还是应该编写管理器。
强烈推荐前面一种写管理器的写法,
一劳永逸,之后也容易进行扩展,比如“暂停所有ENTER_FRAME事件”、"ENTER_FRAME事件分组并根据功能排序"、"功耗统计"等 general_clarke 发表于 2019-5-8 23:39
闭包实现第二种,比上一个安全。
谢谢大哥,第二种的稍微能看懂,第一种略显复杂啊,要用字典什么的,我再仔细看看,感谢。 TKCB 发表于 2019-5-8 18:59
没看懂,你想做什么
就是enterFrame事件本身不是只有一个event参数吗?我想加一些自定义的参数用来做一些动画效果
可能是我描述不清楚,感谢T大回复
页:
[1]