#actionscript-3
#actionscript-3
Вопрос:
Я ни за что на свете не могу понять, почему это происходит. Позвольте мне описать, что я испытываю.
Я добавляю все динамически через actionscript.
В среде разработки Flash, когда я тестирую фильм, иногда все видеоролики на сцене исчезают, и все, что я вижу, — это цвет сцены.
Странно то, что я все еще могу выполнять опрокидывание (я добавил инструкции трассировки в свои обработчики опрокидывания / развертывания). Я также отслеживаю свойства ‘visible’ и ‘alpha’, а также visible = true и alpha = 1.0 !!! Что я наблюдаю, так это то, что иногда методы ролловера / развертывания вызываются несколько раз в быстрой последовательности. Т.Е. порядок вызова метода — ролловер, развертывание, ролловер или развертывание, ролловер, rollout.
Действия, которые я выполняю в своих методах ролловера и развертывания, действительно просты. Все, что они делают, это включают / выключают другие видеоролики…представьте карту … при переносе значка на карту отображается путь, а при свертке путь исчезает.
Однако, если я настрою окно окна тестового фильма, все появится снова!
Самое странное, что когда я его публикую, такого поведения не происходит ни в браузере, ни в приложении!
Что происходит? Может ли это быть связано с памятью в среде разработки?
Публикую некоторый код здесь:
private function rollOverUserListener ( e:MouseEvent ) {
trace(">>>>>>>> rollOverUserListener() e.currentTarget.name : " e.currentTarget.name);
trace("e.currentTarget.alpha: " e.currentTarget.alpha);
trace("e.currentTarget.visible: " e.currentTarget.visible);
e.currentTarget.rollOverAction(); //just scales the icon a little
//fade up/down the appropriate path
worldMap.resetPaths(); //turns off all the paths
for (var i=0; i<users.length; i ){
if ( e.currentTarget == users[i] ) { //highlight the right path
worldMap.highlightPath(i);
}
}
}
private function rollOutUserListener ( e:MouseEvent ) {
trace("<<<<<<<< rollOutUserListener() e.currentTarget.name : " e.currentTarget.name);
e.currentTarget.rollOutAction(); //scales down the icon to normal
worldMap.resetPaths();
}
Комментарии:
1. Может быть, это связано с тем, что временная шкала воспроизводится без вашего ведома? Используете ли вы более одного кадра временной шкалы или используете какое-либо событие. События ENTER_FRAME?
2. Хороший вопрос, Алекс. Я не использую никаких дополнительных кадров на основной временной шкале. Я также только что добавил действие stop () к единственному кадру на основной временной шкале на всякий случай … 🙂
3. Вы используете Mac? У моего коллеги, который предпочитает Mac Pro, часто возникает эта проблема в IDE, и мы так и не нашли для нее решения.
Ответ №1:
Я не думаю, что эффективно пытаться решить эту проблему путем публикации кода, который вы сделали.
Но, я предполагаю, что разница в поведении, которую вы видите, связана с версией flash Player.
CS5 или любая другая версия flash, которая у вас есть, поставляется с последним на тот момент проигрывателем. Но flash Player постоянно обновляется, поэтому, когда вы находитесь в своем браузере, у вас, скорее всего, установлен последний flash Player. Это может объяснить различия, которые вы видите.
Однако приведенный выше код мало чем помогает без просмотра функций highlightPaths и resetPaths. Я вижу, что у вас есть трассировка, но сразу после этого выполняется код, который потенциально может легко изменить состояние всего, что вы отслеживали до рендеринга кадра.
Вставьте несколько трассировок после этого кода, чтобы посмотреть, получите ли вы то, что ожидаете.
Используете ли вы какие-либо библиотеки, функции которых могут поддерживаться только новым Flash Player?
Ответ №2:
private function rollOverUserListener ( e:MouseEvent ) {
trace(">>>>>>>> rollOverUserListener() e.currentTarget.name : " e.currentTarget.name);
trace("e.currentTarget.alpha: " e.currentTarget.alpha);
trace("e.currentTarget.visible: " e.currentTarget.visible);
e.currentTarget.rollOverAction(); //just scales the icon a little
//fade up/down the appropriate path
worldMap.resetPaths(); //turns off all the paths
for (var i=0; i<users.length; i ){
if ( e.currentTarget == users[i] ) { //highlight the right path
worldMap.highlightPath(i);
}
}
}
private function rollOutUserListener ( e:MouseEvent ) {
trace("<<<<<<<< rollOutUserListener() e.currentTarget.name : " e.currentTarget.name);
e.currentTarget.rollOutAction(); //scales down the icon to normal
worldMap.resetPaths();
}