PDA

Просмотр полной версии : Как использовать маску дважды?


Rzer
25.03.2007, 12:42
Есть такая проблема. Необходимо найти пересечение двух областей (общее двух шейпов) и использовать это как маску. Если маскировать дважды (маскировать shape в мувике, который сам будет маской на сцене) - работает некорректно.
Подскажите может кто сталкивался с такой проблемой.

bbexp
25.03.2007, 14:52
Если делать программно, то можно замаскировать мув в контейнере, потом замаскировать сам контейнер. Так вложенные маски работают.

Если такая история не подходит - то вычислять программно пересечение масок и рисовать маску через drawingAPI. но это грандиозный ход в большинстве случаев. Придется писать массу формул для определения пересечения кривых, прямых и т.д. Огромная работа в этом направлении проделана Иваном Дембицким, поизучайте его класc bezier. http://bezier.ru

Rzer
25.03.2007, 15:01
Большое спасибо. Первый подход работает как надо.

iNils
25.03.2007, 15:11
Для потомков
function drawRect (mc:MovieClip, color:Number, x:Number, y:Number, w:Number, h:Number):Void {
mc.beginFill (color, 50);
mc.moveTo (x, y);
mc.lineTo (w, y);
mc.lineTo (w, h);
mc.lineTo (x, h);
mc.lineTo (x, y);
mc.endFill ();
}
var mcA:MovieClip = this.createEmptyMovieClip ("mcA", 1);
var mcMaska1:MovieClip = mcA.createEmptyMovieClip ("mcMaska1", 1);
drawRect (mcMaska1, 0, -100, -100, 100, 100);
var mcClip:MovieClip = mcA.createEmptyMovieClip ("mcClip", 0);
drawRect (mcClip, 0xFF0000, -150, -150, 150, 150);
////
var mcMaska2:MovieClip = this.createEmptyMovieClip ("mcMaska2", 0);
drawRect (mcMaska2, 0, -100, -100, 100, 100);
////
mcA._x = 200;
mcA._y = 200;
mcMaska2._x = 200;
mcMaska2._y = 200;
mcClip.setMask (mcMaska1);
////
this.onEnterFrame = function () {
mcMaska1._rotation++;
mcMaska2._rotation--;
mcA.setMask (mcMaska2);
};