Как вызвать функцию из другого фрейма с помощью ActionScript 2.0?

#flash #function #actionscript #actionscript-2 #flash-cs5

#flash #функция #actionscript #actionscript-2 #flash-cs5

Вопрос:

Я ищу способ вызвать функцию, определенную в другом фрейме в ActionScript 2.0. Подробности следующие:

В качестве события кнопки в фрейме 1 у меня есть:

 on (release)
{
   _root.gotoAndStop(2); //Going to Frame 2.
   selectVideo(5); //Calling a function defined in Frame 2. 
   //Calling this function is not working in the way i wrote it above. 
}
  

В фрейме 2 у меня есть следующий скрипт для самого фрейма:

 var vlist:XML = new XML(); //Creating an XML variable
vlist.ignoreWhite = true; //Ignoring the white spaces in the xml
vlist.load("videoList.xml"); //Loading a list of videos from the xml.

vlist.onLoad = function() 
{
   var videos:Array = this.firstChild.childNodes;
   for (i = 0; i < videos.length; i  )
   {
      vidList.addItem({label:videos[i].attributes.desc, data:videos[i].attributes.url});
   }

   vid.load(vidList.getItemAt(0).data);
   vidList.selectedIndex = 0;

   //Notes:
   //vid: is an instance of (FLVPlayback) component. 
   //vidList: is an instance of a (List) component. 
};

function selectVideo(index:Number) 
{
   //Here is the function that i want to call from frame 1 but it is not getting called.
   vidList.selectedIndex = index;
}

var listHandler:Object = new Object();
listHandler.change = function(evt:Object)
{
    vid.load(vidList.getItemAt(vidList.selectedIndex).data);
};

vidList.addEventListener("change",listHandler);
  

По какой-то причине код на фрейме 2 работает сам по себе, но выбор индекса из списка из другого фрейма не работает. Другими словами, я не могу успешно выполнить вызов selectVideo() из фрейма 1, пока он определен в фрейме 2.

Целью программы, как подразумевается, является ссылка на определенное видео из списка из другого кадра. Весь код работает без ошибок, я просто не могу выбрать видео из списка и воспроизвести его, если оно изначально было в другом предыдущем кадре.

Любые идеи, предложения или решения приветствуются! Заранее спасибо за вашу помощь!

Комментарии:

1. @Dairo При редактировании сообщения, пожалуйста, исправляйте все, а не только одну опечатку.

Ответ №1:

во-первых: сценарии временной шкалы — это беспорядок, попробуйте вместо этого использовать классы.

вы могли бы попробовать и установить переменную на _root . что-то вроде _root.nextIndex = 5; , а затем изменить фрейм на 2.

 on (release)
{
   _root.nextIndex = 5;
   _root.gotoAndStop(2); //Going to Frame 2.
}
  

затем либо вызовите функцию и передайте ей _root.nextIndex , либо полностью удалите функцию и просто выполните

 vidList.selectedIndex = _root.nextIndex;
  

вне какой-либо функции.

Комментарии:

1. Ваши заметки были высоко оценены. Также спасибо за представленное решение. Теперь он работает отлично. Это единственный сценарий временной шкалы, который у меня есть во всем приложении. Приведенный выше код создан исключительно для вопроса. Мой исходный код сильно отличается от этого. Действительно, использование классов имеет важное значение.

Ответ №2:

Это быстрое решение для вашего кода (вам не хватало _root для доступа к основной временной шкале при вызове функции):

 on (release)
{
   _root.gotoAndStop(2); //Going to Frame 2.
   _root.selectVideo(5); //Calling a function defined on the timeline in Frame 2. 

}
  

Но я бы попытался последовать совету pkyeck и попытаться ограничить скрипт, добавляемый в разные фреймы на временной шкале, поскольку это может стать действительно запутанным.

Комментарии:

1. Код Pkyeck работает, но ваш путь ведет к той же проблеме, с которой я сталкивался раньше. Однако это связано с тем, как я запрограммировал свое небольшое приложение. Тем не менее, ваша концепция совершенно верна. ( 1 за вашу помощь)