如何获取动态创建的 Flash 舞台上的 MovieClip 名称?

Posted

技术标签:

【中文标题】如何获取动态创建的 Flash 舞台上的 MovieClip 名称?【英文标题】:How to get name of MovieClip on Flash stage that was created dynamically? 【发布时间】:2011-03-31 06:11:53 【问题描述】:

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

在函数toggleClick里面我放了trace语句:

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() 来获取被点击的电影剪辑的名称?

【问题讨论】:

【参考方案1】:

在 AS3 中,当您创建 MovieClip 时,动态 flash 会为它分配一个只读实例名称,就像您看到的一样(例如实例 12)。找出点击了哪个影片剪辑的最佳方法是简单地使用 MouseEvent 的 currentTarget/target (在此处查看两者之间的区别:http://www.wastedpotential.com/?p=10)。

你会这样使用它:

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;

【讨论】:

使用 currentTarget 很有帮助。我能够在“链接对话框区域/框”中获得分配给 MovieClip 的类名。类名叫做 Comp。 (MovieClip 内部是计算机的图形。类名称 Comp 的原因。) OUTPUT 窗口显示: MovieClip Instance Name = [object Comp] 看起来不错,但我不是 100% 确定如何使用名称 [object Comp ] 在我的下一步。我只想要名称 Comp...而不是 [object Comp]。 @crew: 你可以说e.target.name.substr(7) top 去掉String的前7个字符。 使用 getQualifiedClassName (adobe.com/livedocs/flash/9.0/ActionScriptLangRefV3/flash/utils/…)【参考方案2】:

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

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

  var myButton:MovieClip = new MyButton(); //if you assigned a class name to your 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 );
  

【讨论】:

感谢您向我展示了动态加载的 MovieClip 名称是可能的。我相信它非常有用。我认为我可以命名 MovieClips 实例的唯一方法是手动将 MC 从库中拖到舞台上 - 并在属性面板中对其进行命名。

以上是关于如何获取动态创建的 Flash 舞台上的 MovieClip 名称?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 上的 Flash/AIR 舞台视频 - 有可能吗?表现如何?

从 AS3 文件动态添加 Flash 组件到舞台

AS3 | 1120:未定义属性阶段的访问

Flash Pro cc 为啥我手机上的舞台宽度和高度设置为Flash pro里面的?

用flash CS4 as3.0编程实现元件以舞台中心为中心点缩放中遇到的问题,求指教。

Flash as3 将一个类中的方法调用到另一个放在舞台上的类。