Actionscript 3 如何在动态创建的Flash stage上获取MovieClip的名称?

Actionscript 3 如何在动态创建的Flash stage上获取MovieClip的名称?,actionscript-3,instance,movieclip,Actionscript 3,Instance,Movieclip,有多个电影剪辑将被动态地放置在舞台上。这些电影唇被编码为按钮。我试图弄清楚——当用户点击MovieClip时……弄清楚用户点击的是flash舞台上的哪个对象 在函数内切换单击我放置跟踪语句: trace("movieClip Instance Name = " + e.target.name); 在输出窗口中: movieClip Instance Name = instance5 movieClip Instance Name = instance12 movieClip Instanc

有多个电影剪辑将被动态地放置在舞台上。这些电影唇被编码为按钮。我试图弄清楚——当用户点击MovieClip时……弄清楚用户点击的是flash舞台上的哪个对象

在函数内切换单击我放置跟踪语句:

trace("movieClip Instance Name = " + e.target.name);
在输出窗口中:

movieClip Instance Name = instance5 
movieClip Instance Name = instance12 
movieClip Instance Name = instance5 
movieClip Instance Name = instance32 
movieClip Instance Name = instance5 
movieClip Instance Name = instance59 
这似乎不是为被点击的电影唇命名的方法


getChildByName()是这样做的吗?如果是这样的话,您知道如何使用getChildByName()来获取所单击的MovieClip的名称吗?

在AS3中,当您创建一个MovieClip时,动态地将其闪存为只读实例名称,如您所见(例如instance12)。查找单击了哪个movieclip的最佳方法是只使用MouseEvent的currentTarget/target(请参见此处两者之间的差异:)

您可以这样使用它:

var foo:MovieClip = new MovieClip();
foo.graphics.drawRect(0, 0, 100, 50);
stage.addChild(foo);
foo.addEventListener(MouseEvent.CLICK, clickHandler);

var bar:MovieClip = new MovieClip();
bar.graphics.drawRect(0, 0, 100, 50); bar.y = 100;
stage.addChild(bar);
bar.addEventListener(MouseEvent.CLICK, clickHandler);

//this function will set the x to 100 and the width to 50 of the clicked MovieClip
function clickHandler(e:MouseEvent):void
{
    e.currentTarget.x = 100;
    e.currentTarget.width = 50;
}

在向阶段添加按钮之前,您可以实际命名它

  var myButton:MovieClip = new MovieClip();
  myButton.name = 'button1';

根据您的示例,您可以执行以下操作:

  var comp:Comp = new Comp();
  var monitor:Monitor = new Monitor();

  addItemButton( comp, "comp" , {x:100, y:200});
  addItemButton( monitor, "monitor" , {x:30 , y:50} );


  private function addItemButton(item:MovieClip , itemName:String , params:Object):void
  {
     item.addEventListener(MouseEvent.CLICK , clickHandler );
     item.name = itemName;

     // of course params is not necessary, just making a point of  
     // how to centralize your concerns
     item.x = params.x;
     items.y = params.y;

     addChild( item);
  } 

  private function clickHandler(event:MouseEvent):void
  {
     trace( "button clicked:" + event.currentTarget.name );
  }

使用currentTarget很有帮助。我能够在“链接对话框区域/框”中获得分配给MovieClip的类名。类名为Comp。(MovieClip内部是一个计算机图形。类名Comp的原因。)输出窗口显示:MovieClip实例名称=[object Comp]看起来不错,但我不确定下一步如何使用名称[object Comp]。我只想要名字Comp…而不是[object Comp]。@crew:你可以说
e.target.name.substr(7)
top切掉
字符串的前7个字符。使用getQualifiedClassName()感谢你告诉我动态加载的MovieClips可以命名。我相信它很有用。我认为命名MovieClips实例的唯一方法是手动将MCs从库拖到舞台上,然后在属性面板中命名。
  var comp:Comp = new Comp();
  var monitor:Monitor = new Monitor();

  addItemButton( comp, "comp" , {x:100, y:200});
  addItemButton( monitor, "monitor" , {x:30 , y:50} );


  private function addItemButton(item:MovieClip , itemName:String , params:Object):void
  {
     item.addEventListener(MouseEvent.CLICK , clickHandler );
     item.name = itemName;

     // of course params is not necessary, just making a point of  
     // how to centralize your concerns
     item.x = params.x;
     items.y = params.y;

     addChild( item);
  } 

  private function clickHandler(event:MouseEvent):void
  {
     trace( "button clicked:" + event.currentTarget.name );
  }