我正在尝试编写一个程序的一部分,它通过使用for为相同的对象创建不同的侦听器,但问题是所有这些的结果是相同的,在下面你可以找到我的代码:
for( var i:int=0;i<10;i++){
var obj = new MyClass();
obj.y = i*30;
obj.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent){
value = i.toString();
trace(value);
});
myOtherMovieClip.addChild(obj);
}
我编写上面代码的目的是,通过单击第一个obj,程序在输出中写入0,通过单击第二个,写入1等等,但是此代码为所有对象提供了10。 / p>
我应该补充说,无论myOtherMovieClip区域中是否存在obj,通过单击该区域,我都得到相同的值。
任何想法都会受到赞赏, 谢谢
答案 0 :(得分:1)
实现此目的的最佳方法是将值属性设置为MyClass
对象。
或者,从技术上讲,如果y
属性不变,你可以这样做:
var value:String = (e.target.y / 30).toString();
答案 1 :(得分:1)
为了直接解决您的问题,您可以这样做:
obj.addEventListener(MouseEvent.MOUSE_UP, function():Function{
var value : String = i.toString();
var listener : Function = function(e:MouseEvent):void{
trace(value);
}
return listener;
}());
答案 2 :(得分:0)
有一个简单的解决方法。你的对象。
当然,id必须是MyClass
for( var i:int=0;i<10;i++){
var obj = new MyClass();
obj.y = i*30;
obj.id = 'someMC_' + i
obj.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent){
var aVar:Array = e.target.id.split('_')
trace(aVar[1]);
});
myOtherMovieClip.addChild(obj);
}