#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 за вашу помощь)