PDA

Просмотр полной версии : _alpha у MovieClip с несколькими кругами.


dmitriy_rsl
23.04.2007, 17:27
У меня задача сделать нечто типа карты покрытия путем затемнения (или наложения цвета) участков карты. На входе я имею координаты опорных точек и рисую круги определенного радиуса с центром в этих точках. Далее я хочу получившееся покрытие с _alpha = 20 наложить на карту.
Делаю так:
this.ovl = this.map_mc.createEmptyMovieClip("ovl", this.map_mc.getNextHighestDepth());
for (var i = 0; i < cp_array.length; i++) {
cp = cp_array[i];
with (this.ovl) {
beginFill(0xFF0000);
moveTo(cp.x-r, cp.y);
curveTo(cp.x-r,cp.y+r,cp.x,cp.y+r);
curveTo(cp.x+r,cp.y+r,cp.x+r,cp.y);
curveTo(cp.x+r,cp.y-r,cp.x,cp.y-r);
curveTo(cp.x-r,cp.y-r,cp.x-r,cp.y);
endFill(0xFF0000);
}
}
this.ovl._alpha = 20;

В принципе получаю то, что нужно, НО! у меня внутри мувика покрытия идут затемнения на пересечении кругов. А вот это какраз мне ненужно.
Я так понимаю, что это какое-то деление на слои внутри MovieClip. Но мне оно ненужно... Как от него избавиться?
Я уже пробовал использовать setMask, но тогда мувик покрытия не хочет принимать _alpha и закрывает собой куски карты без прозрачности.

iNils
23.04.2007, 17:47
Если я правильно вас понял, то вам нужно все мувиклипы-круги поместить в один общий мувиклип. Ему назначить прозрачность 20 (а не кругам) и blendMode = 2;

dmitriy_rsl
23.04.2007, 17:51
Если я правильно вас понял, то вам нужно все мувиклипы-круги поместить в один общий мувиклип. Ему назначить прозрачность 20 (а не кругам) и blendMode = 2;

дык я и сделал все круги в одном мувиклипе... а выглядит так, что они в разных... и _alpha я поставил... щас вот blendMode поставил = 2, но всеравно не то...

iNils
23.04.2007, 17:54
Давайте исходник.

dmitriy_rsl
23.04.2007, 18:04
function circle(mc:MovieClip, ax, ay, r:Number) {
with (mc) {
beginFill(0xFF0000);
moveTo(ax-r, ay);
curveTo(ax-r, ay+r, ax, ay+r);
curveTo(ax+r, ay+r, ax+r, ay);
curveTo(ax+r, ay-r, ax, ay-r);
curveTo(ax-r, ay-r, ax-r, ay);
endFill();
}
}
var bg:MovieClip = _root.createEmptyMovieClip("bg", _root.getNextHighestDepth());
bg.beginFill(0x0000FF);
bg.moveTo(0, 0);
bg.lineTo(500, 0);
bg.lineTo(500, 200);
bg.lineTo(0, 200);
bg.lineTo(0, 0);
bg.endFill();
bg._alpha = 40;
var ovl = _root.createEmptyMovieClip("ovl", _root.getNextHighestDepth());
circle(ovl, 200, 100, 50);
circle(ovl, 250, 100, 50);
ovl._alpha = 20;

iNils
23.04.2007, 18:12
Вот что у вас было
function circle (mc:MovieClip, ax:Number, ay:Number, r:Number) {
with (mc) {
beginFill (0xFF0000);
moveTo (ax - r, ay);
curveTo (ax - r, ay + r, ax, ay + r);
curveTo (ax + r, ay + r, ax + r, ay);
curveTo (ax + r, ay - r, ax, ay - r);
curveTo (ax - r, ay - r, ax - r, ay);
endFill ();
}
}
var bg:MovieClip = _root.createEmptyMovieClip ("bg", _root.getNextHighestDepth ());
bg.beginFill (0x0000FF);
bg.moveTo (0, 0);
bg.lineTo (500, 0);
bg.lineTo (500, 200);
bg.lineTo (0, 200);
bg.lineTo (0, 0);
bg.endFill ();
bg._alpha = 40;
var cont:MovieClip = _root.createEmptyMovieClip ("cont", _root.getNextHighestDepth ());
for (var i:Number = 0; i < 3; i++) {
var ovl = cont.createEmptyMovieClip ("ovl" + cont.getNextHighestDepth (), cont.getNextHighestDepth ());
circle (ovl, 200 + i * 75, 100, 50);
}
cont._alpha = 20;
//cont.blendMode = 2;
А теперь расскомментарьте последнюю строчку.

dmitriy_rsl
23.04.2007, 18:14
получается, что каждый круг надо в отдельный мувик впихивать? хм...

спасибо, если в отдельных мувиках, то действительно работает...

iNils
23.04.2007, 18:28
Можно и не в отдельный. Главное, чтобы было два вложенных мувиклипа. К верхнему применяем бленд и альфу, а в нижнем рисуем.
function circle (mc:MovieClip, ax:Number, ay:Number, r:Number) {
with (mc) {
beginFill (0xFF0000);
moveTo (ax - r, ay);
curveTo (ax - r, ay + r, ax, ay + r);
curveTo (ax + r, ay + r, ax + r, ay);
curveTo (ax + r, ay - r, ax, ay - r);
curveTo (ax - r, ay - r, ax - r, ay);
endFill ();
}
}
var bg:MovieClip = _root.createEmptyMovieClip ("bg", _root.getNextHighestDepth ());
bg.beginFill (0x0000FF);
bg.moveTo (0, 0);
bg.lineTo (500, 0);
bg.lineTo (500, 200);
bg.lineTo (0, 200);
bg.lineTo (0, 0);
bg.endFill ();
bg._alpha = 40;
var cont:MovieClip = _root.createEmptyMovieClip ("cont", _root.getNextHighestDepth ());
var ovl = cont.createEmptyMovieClip ("ovl" + cont.getNextHighestDepth (), cont.getNextHighestDepth ());
for (var i:Number = 0; i < 3; i++) {
circle (ovl, 200 + i * 75, 100, 50);
}
cont._alpha = 20;
cont.blendMode = 2;