2015-05-14 3 views
0

Итак, вопрос заключается в следующем:Как ссылаться на многие объекты сразу в ActionScript?

У меня есть набор объектов, и я хочу, чтобы функция использовала все эти элементы набора в функции. Что я могу сделать?

Например:

У меня есть много экземпляров одного и того же MovieClip. Я хочу, чтобы функция NextFrame() выполнялась только для MovieClips, чье имя соответствует ключевому коду ключа, который я только что нажал.

Как я могу ссылаться на все эти символы сразу в выражении «если»?

ответ

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. Создайте пользовательский класс, который автоматически добавляет любой экземпляр этого Видеоклипа массива вас Переберите.

    Сохраните следующий код в файле с именем MyKeycodeClip.as (или что бы вы хотели назвать) рядом с файлом .fla.

    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; 
           } 
          } 
         } 
        } 
    } 
    

Затем вы можете прикрепить этот класс к объекту библиотеки. Перейдите в свойства объектов вашей библиотеки и выберите «Экспорт для действий», в поле ввода класса: MyKeycodeClip.

Теперь, когда вы бросаете этот объект библиотеки на сцену, к нему будет прикреплен код из этого файла (который автоматически добавляет/удаляет его из массива). Вы можете прорезать каждый элемент следующим образом:

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