如何在Actionscript中一次引用多个对象?

时间:2015-05-14 02:42:44

标签: actionscript-3

所以,问题如下:

我有一组对象,我想要一个函数来使用函数中集合的所有元素。我该怎么办?

例如:

我有很多同一个MovieClip的实例。我希望函数NextFrame()只对名称与我刚刚按下的键的keyCode匹配的MovieClip执行。

如何在“if”语句中一次引用所有这些符号?

1 个答案:

答案 0 :(得分:0)

您需要使用loop

假设您的剪辑只是放在时间轴上,那么您可以采用几种方法。

  1. 浏览显示列表并搜索符合条件的所有剪辑。 如果你在舞台上有大量的剪辑,这种方式可能会很昂贵。

    var i:int=this.numChildren;
    while(i--){
         if(this.getChildAt(i).name == nameCriteria){
             //do something here, it matches
         }
    }
    
  2. 将该类的影片剪辑保存在一个数组中,然后遍历该数组:

    var myArray:Array = [mc1,mc2,mc3,mc4];//whatever your movie clips instance names are...
    
    for each(var clip:MovieClip in myArray){
        if(clip.name == nameCriteria){
            //do something
        }
    }
    
  3. 创建一个自定义类,自动将此Movie Clip的任何实例添加到您循环的数组中。

    将以下代码保存在.fla文件旁边名为MyKeycodeClip.as的文件中(或任何您想要调用的文件)。

    package {
        import flash.display.MovieClip;
        import flash.events.Event;
    
        public class MyKeycodeClip extends MovieClip {
            public static var allClips:Array = new Array();
    
            public function MyKeycodeClip(){
                this.addEventListener(Event.ADDED_TO_STAGE, addedToStage, false,0,true);
                this.addEventListener(Event.REMOVED_FROM_STAGE, removedFromStage,false,0,true);
            }
    
    
            private function addedToStage(e:Event):void {
                allClips.push(this);
            }
            private function removedFromStage(e:Event):void {
                for(var i:int=0; i < allClips.length;i++){
                    if(allClips[i] == this){
                        allClips.splice(i,1);
                        return;
                    }
                }
            }
        }
    }
    
  4. 然后,您可以将该类附加到库对象。转到库对象属性,然后在类输入框中选择“Export For Actionscript”,放置:MyKeycodeClip

    现在,无论何时将该库对象放在舞台上,该文件中的代码都会附加到它上面(它会自动从数组中添加/删除它)。你可以循环遍历每个项目:

    for each(var clip:MovieClip in MyKeycodeClip.allClips){
        if(clip.name == nameCriteria){
            //do something
        }
    }