![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Добрый день.
Что хотел: Динамически создать перетаскиваемую размытую маску с расположенным поверх нее мувиком(текст+изображение). Что делал: 1.Создал в отдельном мувике Bitmap сцены, применил к нему blur. 2.Создал мувик(holder_mc) в который поместил: а)маску(m_mc) вышеупомянутого клипа; б)мувик в котором буду выводить текст поверх маски. В чем проблема: Неадекватно срабатывает код причем: 1.проблемы начинаются именно после того, как указываю m_mc в качестве маски. 2.судя по поведению курсора, (useHandCursor), маскирующий мувик передвигается вместе с родительским, но на экране, при этом, его положение не меняется.(( Кто-нибудь сталкивался с подобным? Это баг или моя ошибка? Что делать? ------------------------------- Если поможет, вот реальный код: import mx.core.UIObject;
import flash.filters.*;
import flash.display.*;
class classes.test extends UIObject{
private var a:MovieClip;//размытый фон
private var b:MovieClip;//затемнение реального фона
private var c:MovieClip;//маска для размытого фона
private var d:MovieClip;//холдер маски
private var e:MovieClip;//нечто, лежащее поверх маски(текст, поля ввода и т.п.)
private var fonBmp:BitmapData;
public function test(){
fonBmp=new BitmapData(Stage.width,Stage.height);
fonBmp.draw(_root);
a=this.createEmptyMovieClip("a",1);
a.attachBitmap(fonBmp,a.getNextHighestDepth());
a.cacheAsBitmap = true;
a.filters=[new BlurFilter(5,5)];
b=this.createEmptyMovieClip("b",this.getNextHighestDepth());
b.beginFill(0xDDDFCD,60);
b.lineStyle(0,0xff0000);
b.lineTo(Stage.width,0);
b.lineTo(Stage.width,Stage.height);
b.lineTo(0,Stage.height);
b.endFill();
d=this.createEmptyMovieClip("d",this.getNextHighestDepth());
e=d.createEmptyMovieClip("e",d.getNextHighestDepth());
e.lineStyle(20,0xff0000);
e.lineTo(50,100);
c=d.createEmptyMovieClip("c",d.getNextHighestDepth());
c.lineStyle(0,0xff0000);
c.beginFill(0x006655);
c.lineTo(200,0);
c.lineTo(200,100);
c.lineTo(0,100);
c.endFill();
c._parent._x=d._y=150;
a.setMask(c);
b.swapDepths(a);
b.cacheAsBitmap = true;
// trace("Depth. A: "+a.getDepth()+" B:"+b.getDepth()+" C:"+c.getDepth()+" E:"+e.getDepth());
c.onPress=function(){_parent.startDrag();}
c.onRelease=function(){_parent.stopDrag();}
}
}
Последний раз редактировалось Torero; 05.07.2007 в 18:57. |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
|
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
не работает. Да и как он в runtime идентифицирует "d"?)
Перепробовал все что только мог. Такое ощущение, что надо либо drag вручную прописывать через onMouseDown, либо setMask, обновляя клип с небольшим интервалом. И то и другое сделать можно, но неправильный какой-то подход получается... |
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
|
А у вас все неправильно. И названия переменных, и создание функций внутри методов. Я уже молчу, что проблемы надо локализовать, фильтры и куча прочего мусора к проблеме не относятся, и в результате у многих не возникает желание разбираться в вашем коде, отсюда и молчание в теме.
|
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
Тоже не работает. Происходит именно то, о чем писал:
Цитата:
Последний раз редактировалось Torero; 06.07.2007 в 12:31. |
|
|||||
|
[+1.4 18.06.07]
Регистрация: May 2007
Адрес: Moscow
Сообщений: 263
|
2iNils:Для описания компонентов - решил выучить язык, создавая простенькие компоненты. Когда основные моменты прояснятся, буду учиться межклассовому взаимодействию - как передавать данные, как вызывать, как наследовать и т.п. + довольно удобно с точки зрения дальнейшего использования...
Переписал код. Проблема возникает в тот момент, когда для "замаскированного" клипа устанавливаю "cacheAsBitmap=true". private function rect(mc:MovieClip,rx:Number,ry:Number,rcol:Number):Void { //Рисуем прямоугольник
mc.beginFill(rcol,60);
mc.lineTo(rx,0);
mc.lineTo(rx,ry);
mc.lineTo(0,ry);
mc.endFill();
}
private function drawmask(){
var maskee_mc:MovieClip;//"замаскированный" клип
var mask_mc:MovieClip;//маска
var holder_mc:MovieClip;//холдер маски
var top_mc:MovieClip;//нечто, лежащее поверх маски(текст, поля ввода и т.п.)
maskee_mc=this.createEmptyMovieClip("maskee", this.getNextHighestDepth());
rect(maskee_mc,400,400,0xFF0000);
holder_mc=this.createEmptyMovieClip("holder", this.getNextHighestDepth());
mask_mc=holder_mc.createEmptyMovieClip("mask", holder_mc.getNextHighestDepth());
rect(mask_mc,200,100,0);
top_mc=holder_mc.createEmptyMovieClip("top", holder_mc.getNextHighestDepth());
rect(top_mc,20,20,0x0000FF);
maskee_mc.cacheAsBitmap=true;//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
maskee_mc.setMask(mask_mc);
mask_mc.onPress=function(){_parent.startDrag();}
mask_mc.onRelease=function(){_parent.stopDrag();}
}
Смог решить проблему, но способ извращенный - при "cacheAsBitmap=true" flash не прорисовывает маску при смещении родительского клипа, но прорисовывает, когда мы обращаемся непосредственно к ней. Наверное, в данном случае, все-таки лучше самому создать аналог setMask, пусть даже это встанет в ресурсы.. Если, вдруг, кому понадобится, выкладываю рабочий вариант: Последний раз редактировалось Torero; 07.07.2007 в 04:09. |
![]() |
![]() |
Часовой пояс GMT +4, время: 08:27. |
|
|
« Предыдущая тема | Следующая тема » |
|
|