Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Что может перебивать onEnterFrame? (http://www.flasher.ru/forum/showthread.php?t=87190)

vampr0 31.10.2006 04:27

Что может перебивать onEnterFrame?
 
Продолжаю мучать флеш, поэтому очередной ламерский вопрос :o

Написал кусок кода, вот такой:
Код:

image_url = '_somepic.JPG';
alpha_delay = 15
       
for(var i:Number = 1; i < 7; i++) {
                this.createEmptyMovieClip("square_mc" + i, _root.getNextHighestDepth());
                _root["square_mc" + i]._x = 45 * i;
                _root["square_mc" + i].createEmptyMovieClip("image_upper" + i, _root["square_mc" + i].getNextHighestDepth());
                _root["square_mc" + i]['image_upper' + i].loadMovie('prev1_' + i + image_url);
//                _root["square_mc" + i]['image_upper' + i]._alpha = 0;

                _root["square_mc" + i].onRollOver = function() {
                                var ClipPath:String = "" + this;
                                buttonName = ClipPath.substr(ClipPath.indexOf(".") + 1, ClipPath.length - ClipPath.indexOf("."));
                                imageName = 'image_upper' + ClipPath.substr(ClipPath.length - 1, 1);
                                _root[buttonName][imageName].onEnterFrame = function () {
                                        if (_root[buttonName][imageName]._alpha > 0) {
                                                _root[buttonName][imageName]._alpha -= alpha_delay;
                                        }
                                }
                };
                _root["square_mc" + i].onRollOut = function() {
                                var ClipPath:String = "" + this;
                                buttonName = ClipPath.substr(ClipPath.indexOf(".") + 1, ClipPath.length - ClipPath.indexOf("."));
                                imageName = 'image_upper' + ClipPath.substr(ClipPath.length - 1, 1);
                                _root[buttonName][imageName].onEnterFrame = function () {
                                        if (_root[buttonName][imageName]._alpha < 100) {
                                                _root[buttonName][imageName]._alpha += alpha_delay;
                                        }
                                }
                };
};

Вкрадце делающий следующее - создает мувиклип с картинкой внутри кнопки, и при наведении на кнопку должен потихоньку показывать картинку, и при убирании мышки с нее делать ее невидимой, все работает, но! Работает только в первый раз, то есть в даном коде, например, создается 6 картинок, и этот эфект работает для любой из созданых картинок, но только при наведении на одну из них в первый раз. Если же после этого попробовать навести курсор на любую из других, то согласно трейсу изменение альфы в онЕнтерФрейм что-то блокирует, постоянно скидывая ее в ноль, но что может ее скидывать, так и не понял...

В общем буду благодарен за разбор полетов, ну и вообще :o

wvxvw 31.10.2006 05:03

Попробуй делать так:
Код:

for(i=0; i<7; i++){
var myBtn:MovieClip = _root.createEmptyMovieClip("square_mc" + i, _root.getNextHighestDepth());
with(myBtn){
_i = i;
}
myBtn.onRollOver = function(){};
myBtn.onRollOut = function(){};
}

Соответственно и адресовать внутри функции как-нть попроще... а то там черт ногу сломит. Например, чтобы в теле метода обратится к объекту его инициировавшего достаточно поставить this, конструкции типа _root[buttonName][imageName] очень тяжело читаются...

С другой стороны alpha_delay - не видна в теле функции (воспринимается как локальная переменная. Нужно _root.alpha_delay.

Желательно удалять onEnterFrame после того, как альфа дошла до нуля. Ну и наоборот, когда больше ста - тоже.

vampr0 31.10.2006 07:57

Цитата:

Сообщение от wvxvw
Желательно удалять onEnterFrame после того, как альфа дошла до нуля. Ну и наоборот, когда больше ста - тоже.

Вот собсно была такая мысль, но в каком направлении копать в хелпе по этому поводу не понял, думал было делать дубликаты и убивать их, но чет решил что это еще более нелехкий путь...

BigDan 31.10.2006 12:57

onEnterFrame мы присваиваем функцию, значит надо заканчивать функцию. Чтоб закончить функцию достатачно написать return;


Часовой пояс GMT +4, время: 10:14.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.