Форум 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=105385)

_squirrel 14.12.2007 15:22

ColorMatrixFilter срабатывает на всегда
 
На aspx-странице нeсколько флешек типа (многоточие - пропущенный код, не суть важен):
Код:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="220" height="165" id="hclick_1">
<param name="FlashVars" value="imagepath=http://...4.jpg&amp;noChange=1&amp;..."></param>
<param name="allowScriptAccess" value="sameDomain"></param>
<param name="movie" value="/swf/clickSt.swf"></param>
<param name="quality" value="high"></param>
<param name="bgcolor" value="#ffffff"></param>
<param name="wmode" value="transparent"></param>
<embed src="/swf/clickSt.swf" quality="high" bgcolor="#ffffff" width="220" height="165" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" wmode="transparent" name="hclick_1" FlashVars="imagepath=http://.../4.jpg&amp;noChange=1&amp;..."></embed>
</object>

Отличие между флешками только в id/name и FlashVars.

В самом swf идет загрузка картинки в мувик и установка ч/б фильтра, если параметр noChange=1. Примерно так:
Код:

if (!imgLoader)        {var imgLoader:MovieClipLoader = new MovieClipLoader();}
var listener:Object = new Object();
listener.onLoadInit = function(target_mc:MovieClip):Void {
                SetMonoColor(target_mc);       
}
imgLoader.addListener(listener);
imgLoader.loadClip(picPath, cImgIn); // picPath == _root.imagepath, cImgIn:MovieClip

function SetMonoColor (mc:MovieClip) {
        // readOnlyFlag == noChange
        if (readOnlyFlag) { 
            var matrix:Array = new Array();
       
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
            matrix = matrix.concat([0, 0, 0, 1, 0]);

                var filter:BitmapFilter = new ColorMatrixFilter(matrix);
            mc.filters = new Array(filter);
        }
}

Результат: поведение флеша весьма странное - иногда ч/б фильтр срабатывает, иногда нет (т.е. загруженные картинки остаются цветными). При том на одной странице из трех флешек одна например будет ч/б, а остальные цветными. Выглядит как чисто случайный процесс...
У меня не локалхосте все работает как надо, бага замечена заказчиком.
Передача/получение FlashVars проверено - все ок.
Пытались добавить параметр к url, чтоб избежать кеширования, типа: /swf/clickSt.swf?a=<какой-нибудь GUID> - не помогло.

Помогите пожалуйста! В чем может быть проблема??
У меня больше нет никаких идей...(((

З.Ы. Извините, если пост отправлен не туда

wvxvw 14.12.2007 15:42

Не смотря на путаницу в областях видимости, код должен работать. Проблема скорее всего с передачей параметров (флешварз) попробуйте еще раз проверить.
(В смысле, переменные из флешварз не появляются в руте мгновенно до выполнения кода, попробуйте проверять их наличие watch'ем или в onEnterFrame.)

_squirrel 14.12.2007 16:17

Нет, переменные точно здесь не при чем. Если убрать проверку на readOnly (см. код ниже), ситуация остается прежней :(
Код:

function SetMonoColor (mc:MovieClip) {
            var matrix:Array = new Array();
       
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
                matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
            matrix = matrix.concat([0, 0, 0, 1, 0]);

                var filter:BitmapFilter = new ColorMatrixFilter(matrix);
            mc.filters = new Array(filter);
}

В чем же проблема??

wvxvw 14.12.2007 16:20

Код:

import flash.filters.ColorMatrixFilter;
//
function SetMonoColor(mc:MovieClip) {
        var matrix:Array = new Array();
        matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
        matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
        matrix = matrix.concat([0.25, 0.25, 0.25, 0.25, 0]);
        matrix = matrix.concat([0, 0, 0, 1, 0]);
        var filter:ColorMatrixFilter = new ColorMatrixFilter(matrix);
        mc.filters = new Array(filter);
        getURL("javascript:alert('"+mc.filters.length+" : "+(mc.filters[0] instanceof ColorMatrixFilter)+"')");
}

Ну, попробуйте так, посмотрите, что скажет... хотя я на 99% уверен, что ошибка не связана с фильтром.

_squirrel 14.12.2007 16:42

Тест проведен на моей машине, результат весьма занятный:
- если обращаться к странице через http://localhost/..., то все ок, алерт возвращает 1:true
- если обращаться к странице через http://<machine_name>/..., то все плохо и алерт возвращает undefined:false

Это что, что-то секьюрное?? о_О

wvxvw 14.12.2007 23:57

Версия плеера какая? Битмапфильтры только с 8-й поддерживаются... хотя, это не объясняет различного поведения в пределах одной страницы =/ вобщем, странное что-то.
ЗЫ. Вот, подумал. Грузится флешка или картинка? Если флешка - может в ней стОит System.security.allowDomain("*"); поставить =/


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

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