PDA

Просмотр полной версии : использование рисунков через LineTo как масок


Zhihar
19.06.2006, 22:15
Приветствую

Вопрос такой:

Я нарисовал некий контур используя lineTo и moveTo команды
Как мне объявить этот контур маской для некоторого слоя?

Можно маленький пример?

iNils
19.06.2006, 22:23
Линии не могут быть маской, нужна заливка. Программно нельзя назначать маску слою, а только мувиклипу. Делается это так:
имя_мувиклипа.setMask (имя_мувиклипа_маски);

Zhihar
19.06.2006, 22:26
что - линии совсем не могут быть масками!!!
а что же мне сделать - я рисую линии через массив с вершинами

iNils
19.06.2006, 22:32
Но вы же задаете им определенную толщину? Вот теперь вам надо рисовать фигуры шириной в эту толщину.

Ventur
19.06.2006, 22:53
// рисуем, заливаем
this.createEmptyMovieClip("shape", 1);
shape.lineStyle(1, 0x000000, 100);
shape.beginFill(0xFF0000, 100);//красная заливка
shape.moveTo(100, 100);
shape.lineTo(200, 56);
shape.lineTo(200, 25);
shape.lineTo(100, 200);
//еще как-нибудь
shape.lineTo(100, 100);
shape.endFill();
//и, как писал iNils, назаначаем маску (я не между строк смотрел:))
mc.setMask(shape);
//Все, проверил, работает - сам удивлен:)
//Если же нужно именно по контуру (без заполнения не
//получается, проверил), т.е. обводкой без заполнения - вспоминай теорию построения
//фигур в 2-мерной плоскости, рисуй 2 контура, отстоящие на опр. значение,
//заполняй промежкток и т.д. это в полярных координатах легче:), чем в прямоугольных

Zhihar
20.06.2006, 01:01
ну проще тогда рисовать не линию а прямугольник который чуть шире этой линии

вот только скорость просядет
или отрисовку как-нить оптимизировать можно?

Ventur
20.06.2006, 01:09
Я думал еще про дублирование клипов по координатам контура, но маску потом несколькими клипами назначить проблематично. Надо поэксперементировать.

Ventur
20.06.2006, 01:14
this.createEmptyMovieClip("square_mc", 1);
square_mc.lineStyle(5, 0x000000, 100);
square_mc.beginFill(0xFF0000, 100);
square_mc.moveTo(100, 100);
square_mc.lineTo(200, 100);
square_mc.lineTo(200, 200);
square_mc.lineTo(100, 200);
square_mc.lineTo(100, 100);
square_mc.moveTo(110, 110);
square_mc.lineTo(210, 110);
square_mc.lineTo(210, 210);
square_mc.lineTo(110, 210);
square_mc.lineTo(110, 110);
square_mc.endFill();
//контуром, нет времени эксперементировать
//пробуй