PDA

Просмотр полной версии : Создание бордера на shape


leo99
19.02.2009, 21:04
Помогите найти правильное решение, создания бордера вокруг уже созданой формы (любой сложности).
Пример (на словах): существует множество "movie clip" содержащих один слой с разнообразным "shape",
задача - пройтись по всем мувикам залить их определенным цветом, и нарисовать им бордер 1px другим цветом.

Для этого написал одну функцию (св. в конце темы),
но она плохо спраляется с определнными формами,
может ктось уже сталкивался с данной задачей, помогите плиз:)

function changeColor(obj,fill,bg){
Name=obj._name;
obj.attachMovie(Name,'bg1',1,{_x:1,_y:1});
ColorBg = new Color(obj['bg1']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg2',2,{_x:-1,_y:1});
ColorBg = new Color(obj['bg2']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg3',3,{_x:1,_y:0});
ColorBg = new Color(obj['bg3']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg4',4,{_x:-1,_y:0});
ColorBg = new Color(obj['bg4']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg5',5,{_x:0,_y:1});
ColorBg = new Color(obj['bg5']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg6',6,{_x:0,_y:-1});
ColorBg = new Color(obj['bg6']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg7',7,{_x:1,_y:-1});
ColorBg = new Color(obj['bg7']);
ColorBg.setRGB(bg);
obj.attachMovie(Name,'bg8',8,{_x:-1,_y:-1});
ColorBg = new Color(obj['bg8']);
ColorBg.setRGB(bg);

obj.attachMovie(Name,'area',9,{_x:0,_y:0});
ColorFill = new Color(obj['area']);
ColorFill.setRGB(fill);
}

obj - сылка на "movie clip" который существует на сцене и в библиотеке установлен "Export for ActionScript"
fill - цвет заливки
bg - цвет бордера

dimarik
19.02.2009, 23:24
класс GlowFilter. Пример (http://noregret.org/tutor/filters/filter_demo.html) использования.

leo99
20.02.2009, 13:21
dimarik спасибо за ответ, и ссылочку (почитаю на досуге другие статьи).

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

aksios
20.02.2009, 13:44
Раскройте смысл: "уже созданой формы" - кем, как и когда созданной?
Нужный эффект можно получить, но как бы универсальное решение будет за рамками приведенной функции и целесообразность таких затрат на обработку изображения вызывает сильные сомнения. Особенно, касаясь реализации на АС2.

leo99
20.02.2009, 14:32
работа ведется с векторной картой,
которая имеет большое количество "областей" отделенных друг от друга границой.
все области "shape", я взял в мувиклип, установил для них "Export for ActionScript" и задал то же имя на сцене.
При парсинге xml, каждая область должна быть залита определенным цветом + должна быть нарисована граница тоже определнного цвета.
т.к. областей очень много (+ будут еще аналогичные карты), и цветовые гаммы будут менятся, без actionscript обойтись не получится.

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

qazwsx
20.02.2009, 14:47
Непонимаю в чем проблема? Области по точкам рисуются? Если да то проблем вообще не может быть никаких...

GlowFilter нужно установить внутренний с маленьким блюром и большой "силой". Патом то что получится лучше срисовать в битмап и использовать...

leo99
20.02.2009, 15:39
области уже есть, их нужно закрасить и нарисовать бордер...
с GlowFilter уже наигрался, тормоза ужас... областей > 200, и это еще не предел

qazwsx
20.02.2009, 15:54
Неправильно игрался

leo99
20.02.2009, 20:10
Неправильно игрался
повторяюсь, GlowFilter не подходит, т.к.
1. жрет много ресурсов
2. бордеры делает не те что мне нужно

qazwsx
20.02.2009, 20:44
Потому что ты не правильно делаеш)

P.S Повторяю...

Смотри в сторону http://www.flasher.ru/forum/showpost.php?p=799875&postcount=6

leo99
20.02.2009, 21:12
qazwsx
да, я тебя понял, с внутренним Glow граница рисуется именно так как и нада! но к сожалению нужна только внешняя граница (((
если для всех "областей" сделать внутреннюю границу - между "областями" появятся пустые места

qazwsx
20.02.2009, 21:15
Главное рисовать на битмап и удалять глоу чтобы небыло лагов ~_~. Внешняя тоже может быть без каких либо закруглений и тд...

aksios
20.02.2009, 23:11
работа ведется с векторной картой,
которая имеет большое количество "областей" отделенных друг от друга границой.

Вектор в вашем понимании в чем заключается?
Вы как и Ваши советчики фактически забываете о векторе и заменяеете его растром. Что не правиьно. Если Вам не охота описывать карту как вектор, что было бы самым правильным решением, то получите границы областей в любом адекватном редакторе и пихните во флеш. В чем проблема то?

Wolsh
21.02.2009, 03:59
Что-то я Вас не понимаю - это плохой, негодный бордер чтоли?
Тогда хочу увидеть годный.