【问题标题】:How to get name of MovieClip on Flash stage that was created dynamically?如何获取动态创建的 Flash 舞台上的 MovieClip 名称?
【发布时间】: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() 来获取被点击的电影剪辑的名称?

【问题讨论】:

    标签: actionscript-3 instance movieclip


    【解决方案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个字符。
    【解决方案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 从库中拖到舞台上 - 并在属性面板中对其进行命名。
    猜你喜欢
    • 2016-04-30
    • 2013-11-25
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多