PDA

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


Micar
30.05.2006, 14:00
Добрый день, подскажите, пожалуйста:

есть ряд мувиков, они подгружаются в ленту в помощью 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, в нем фла, все лишнее я стерла для понятности (http://skuratov-arch.ru/sample_mix/sample_mix.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];
}
}

}

вот оно (http://skuratov-arch.ru/sample_mix/)

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

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').