Форум 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)
-   -   _alpha у MovieClip с несколькими кругами. (http://www.flasher.ru/forum/showthread.php?t=94925)

dmitriy_rsl 23.04.2007 17:27

_alpha у MovieClip с несколькими кругами.
 
У меня задача сделать нечто типа карты покрытия путем затемнения (или наложения цвета) участков карты. На входе я имею координаты опорных точек и рисую круги определенного радиуса с центром в этих точках. Далее я хочу получившееся покрытие с _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

Цитата:

Сообщение от iNils
Если я правильно вас понял, то вам нужно все мувиклипы-круги поместить в один общий мувиклип. Ему назначить прозрачность 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;



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

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