以下是我的AS3代码:
public function load_swfs(event:Event)
{
var loader:Loader = event.target.getChildAt(0) as Loader;
var mc:MovieClip = loader.content as MovieClip;
var mc_name = 'somethingGeneratedElsewhere';
this.animations[mc_name] = mc;
}
// --------------------------------------------------------------------
public function add(mc_name)
{
//this.animations is a object that holds a bunch of dynamically loaded SWF files.
addChild(this.animations[mc_name]);
this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
}
// --------------------------------------------------------------------
public function enter_frame_handler(e:Event)
{
//how do I get mc_name in this function
// Example, if I run add('movie123'). How do I get 'movie123' in this function?
}
如果我运行add('movie123')。如何在enter_frame_handler函数中获取字符串'movie123'?
更新
此论坛帖子(Click Here)描述了我遇到的问题,但没有提供我正在寻找的解决方案。幸运的是,@ kapep提供了一个解决问题的简单解决方案。
答案 0 :(得分:3)
其他解决方案通常是更好的选择。如果无法动态添加属性,则仍可以使用Dictionary将对象映射到名称。
private var animationNames:Dictionary = new Dictionary();
public function add(mc_name)
{
// store animation object and the name
animationNames[this.animations[mc_name]] = mc_name;
addChild(this.animations[mc_name]);
this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
}
// --------------------------------------------------------------------
public function enter_frame_handler(e:Event)
{
var name:String = animationNames[e.currentTarget];
// ...
}
无论如何,请记住this.animations[mc_name]
并没有真正使用动画片段名称,并且无法以这种方式获取变量名称。如果你做this.animations[some_other_name] = this.animations[mc_name];
,你会有两个变量引用同一个对象。没有办法告诉哪个变量用于附加监听器。因此,请确保您了解movieclip名称与其变量名称之间的区别。
答案 1 :(得分:2)
public function eventListener(e:Event)
{
var target:MovieClip = (e.target as MovieClip);
// Target is the object that dispatched the event.
}
答案 2 :(得分:2)
首先需要命名影片剪辑,然后使用e.currentTarget.name
// --------------------------------------------------------------------
public function add(mc_name)
{
//this.animations is a object that holds a bunch of dynamically loaded SWF files.
addChild(this.animations[mc_name]);
this.animations[mc_name].name = mc_name; // IMPORTANT - name the MovieClip
this.animations[mc_name].addEventListener(Event.ENTER_FRAME, enter_frame_handler);
}
// --------------------------------------------------------------------
public function enter_frame_handler(e:Event)
{
trace(e.currentTarget.name);
}
答案 3 :(得分:2)
public function eventListener(e:Event)
{
var target:MovieClip = (e.target as MovieClip);
trace(target.name); // should return the name
}
答案 4 :(得分:0)
如果你正在寻找它的索引
,你可以使用这一行迹(stage.getChildIndex(影片剪辑(event.target)));