Форум 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)
-   -   применение ColorMatrixFilter к мувикам, подгруженным в цикле - пашет только в локале (http://www.flasher.ru/forum/showthread.php?t=80494)

Micar 30.05.2006 14:00

применение ColorMatrixFilter к мувикам, подгруженным в цикле - пашет только в локале
 
Добрый день, подскажите, пожалуйста:

есть ряд мувиков, они подгружаются в ленту в помощью MovieClipLoader и потом расставляются по местам.
По замыслу, они должны быть greyscale, т.е., обесцвеченными, а только при наведении мышки - цветными.

так вот, в локале все работает, а в сети
работает только с первой картинкой цикла!
поскажите, почему такое может быть?
заранее признательна

код примерно такой:

Код:


//в самом начале
import flash.filters.ColorMatrixFilter;

var myElements_array:Array = [0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0, 0, 0, 1, 0];
var grey:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
var myElements_array2:Array = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
var color:ColorMatrixFilter = new ColorMatrixFilter(myElements_array2);

//потом загрузка списка, внутри onData запускаются остальные ф-ции,
//в т.ч. ф-ция загрузки через MCЛодер, внутри него - расставляется все
//по местам, и написано для каждого (через цикл) мувика примерно следующее:


путь к картинке["t"+i].onRollOut = function() {
        arrOfClips[i].filters = [color];
}
путь к картинке["t"+i].onRollOut = function() {
        arrOfClips[i].filters = [grey];
}

все в 8-ке,
экспорт - тоже, в 8-й плеер

Nirth 30.05.2006 14:03

где находятся картинки?

Micar 30.05.2006 14:13

в папках, два уровня вложенности.
каждая картинка - в своей папке
названия папок передаются из массива

Micar 30.05.2006 14:34

неужели оно не поддерживает картинки из разных папок?
они же вроде подгружаются в swf, должны слушаться :)

Micar 30.05.2006 14:46

попробовала перенести картинки в корневую директорию -
все та же самая проблема - работает только первая картинка, остальные остаются цветными...
и если положить в ту же директорию, что и swf-шник, в который все грузится - все то же

написала в несущей html-ке version плеера - 8, но это кажется ничего не значит толком...


помогите не зарыться... :)

Samodelkin 30.05.2006 14:51

а зачем два раза onRollOut?

лучше покажи код где грузишь картинки. а еще лучше весь код.

Micar 30.05.2006 15:12

буду рада если кто посмотрит

вот RAR, в нем фла, все лишнее я стерла для понятности

знаю, что про другое вопросы надо отдельно задавать, и я задам,
но вдруг - если уж будете смотреть -
тормозит у меня просчет вначале - в чем ошибка?

два раза rollOut - это опечатка, разумеется :)

AlexSol 30.05.2006 15:23

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

Micar 30.05.2006 18:45

Уважаемые знатоки :) !!!

кажется, я поняла в чем дело -
я запускала много циклов,
а стоило использовать параметр функции onLoadInit

во всяком случае вот это работает

Код:

import flash.filters.ColorMatrixFilter;

var myElements_array:Array = [0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0.3, 0.59, 0.11, 0, 0, 0, 0, 0, 1, 0];
var grey:ColorMatrixFilter = new ColorMatrixFilter(myElements_array);
var myElements_array2:Array = [1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0];
var color:ColorMatrixFilter = new ColorMatrixFilter(myElements_array2);


makeImages(8);

function makeImages(j) {
                var list = {};
                var loader = new MovieClipLoader();
                loader.addListener(list);

for (i=0; i<j; i++) {
                this.createEmptyMovieClip("o"+i, i);
                this["o"+i]._x = 100+ i*150;
                this["o"+i]._y = 300;
                var mes = this["o"+i];
                loader.loadClip(i+".jpg", mes);
}

               
                list.onLoadInit = function(u) {
                        u.filters = [grey];
                    u.onRollOver = function() {
                                this.filters = [color];
                        }
                        u.onRollOut = function() {
                                this.filters = [grey];
                        }
                }

}

вот оно

надеюсь будет работать и в проекте :)
спасибо за человеческое участие!

heilong 31.05.2006 14:59

действительно, миллион раз уже проблемы была в том что делаешь что-то с клипом, который ещё не загрузился. мораль - всегда любые действия с клипом, загружаемым извне (не attachMovie) делать только проверив что загрузка завершена. лучше всего MovieClipLoader.onLoadInit.
ещё ужасная штука - если внутри клипа есть код, он выполняется после того как выполнится весь код которые его аттачит. например
Код:

// inside mc1's actions
trace('mc1 init');

// inside root's actions
attachMovie('mc1', 'mc1', getNextHighestDepth());
trace('mc1 attached');

сначала выведется 'mc1 attached', потом 'mc1 init'. неинтуитивно и вообще плохо (с классами например всё правильно и с точность до наоборот, сначала будет конструктор, потом только attachMovie возвращается и будет 'mc1 attached').


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

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