【问题标题】:AS3: Loop though MovieClip NamesAS3:循环播放电影剪辑名称
【发布时间】:2012-04-20 01:59:32
【问题描述】:

我正在尝试创建一个循环,该循环将通过允许您附加图像的影片剪辑名称。

到目前为止,这是我的代码:

private var mc:MovieClip;
private var instance:String;

public function showFriends(e:Event)
{
    var str:String = e.target.data;
    var num:uint;
    var i:Number;
    var rex:RegExp = /[\s\r\n]*/gim;
    var friends_array:Array = [];

    num = friends_array.length;
    friends_array = str.split(',');

       for(i=0; i<num; i++){
           var fri_id = friends_array[i].replace(rex,'');

           mc = "P"+i; // THIS IS THE PROBLEM LINE

           instance = 'DP';// Sets the Instance Name
           load_DP(fri_id);
       }
}

我正在尝试找出如何将循环中的数字 (var i) 添加到 MovieClip 的名称中。

目前此代码无法正常工作并出现错误:

将 String 类型的值隐式强制转换为不相关的类型 flash.display:MovieClip。

这意味着它使用字符串名称作为 MC,因此无法正常工作。

如果我也改变它:

mc = P1; // with no quotes

这可行,但显然只使用一个 MC。

如果你能帮忙,请告诉我。

谢谢。

伊莱

【问题讨论】:

    标签: actionscript-3 flash loops


    【解决方案1】:

    如果您尝试访问的所有 MovieClip 实例都是当前组件的子级,则可以使用以下表示法。

    mc = this["P" + i];
    

    如果它们都是其他组件的子组件,您也可以将它们访问为...

    mc = myComponent["P" + i];
    

    【讨论】:

      【解决方案2】:

      查看 DisplayObjectContainer 的 getChildByName 方法。如果 showFriends 在您的 Document 类中,那么它应该作为 \

      mc = this.getChildByName("P" + i);
      

      这应该可以工作 -* 但是 *- 这是相对较慢且不是好的做法。最好将这些 MovieClip 动态添加到舞台(在代码中,而不是拖动到舞台),这样您就已经有了对它们的引用。

      【讨论】:

      • 除非你在一个有几千个项目的显示列表上调用它,否则它会足够快。我还认为这比像其他答案所建议的那样将孩子称为直接属性引用更好。 +1
      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 2015-03-03
      • 1970-01-01
      • 2013-08-08
      • 2021-02-24
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多