Я создал спрайт для перетаскивания по сцене.спрайт замаскирован и имеет свою маску как дочерний, так что он тоже будет перетаскивать вместе со спрайтом.все работает нормально, пока я не добавлю фильтр спрайтов.Когда тень добавлена, я могу только перетаскивать мышью и перетаскивать мышью спрайт, если события мыши происходят в исходном месте спрайта, когда он был добавлен на сцену.
как я могу это исправитьпроблема?это могло быть проблемой с 10.1?если нет то что я делаю не так?
var thumbMask:Sprite = new Sprite();
thumbMask.graphics.beginFill(0, 1);
thumbMask.graphics.drawRoundRect(0, 0, 100, 75, 25, 25);
thumbMask.graphics.endFill();
var thumb:Sprite = new Sprite();
thumb.graphics.beginFill(0x0000FF, 1);
thumb.graphics.drawRect(0, 0, 100, 75);
thumb.graphics.endFill();
thumb.addEventListener(MouseEvent.MOUSE_DOWN, drag);
thumb.addEventListener(MouseEvent.MOUSE_UP, drop);
thumb.filters = [new DropShadowFilter(0, 0, 0, 1, 20, 20, 1.0, 3)];
thumb.addChild(thumbMask);
thumb.mask = thumbMask;
addChild(thumb)
function drag(evt:MouseEvent):void
{
evt.target.startDrag();
trace("drag");
}
function drop(evt:MouseEvent):void
{
evt.target.stopDrag();
trace("drop");
}
---------------- ОБНОВЛЕННОЕ РЕШЕНИЕ ----------------
благодаря предложению бинарного файла, проблема решена с помощью cacheAsBitmap.однако, когда я применил cacheAsBitmap к контейнеру, в котором находился спрайт маскированного пальца, к которому уже применена тень, события мыши не работали так, как ожидалось.Прочитав документы, я узнал, что добавление фильтра в спрайт автоматически активирует свойство cacheAsBitmap для этого спрайта:
Свойству cacheAsBitmap автоматически присваивается значение true, когда вы применяете фильтр к экранному объекту (когда его массив фильтров не пустой) и если к экранному объекту применен фильтр, для cacheAsBitmap указывается значение true для этого экранного объекта, даже если для свойства установлено значение false.Если вы очистите все фильтры для экранного объекта, параметр cacheAsBitmap изменится на последний установленный. 1
, поэтому я считаю, что ошибка была вызвана наличием 2 свойств cacheAsBitmap в одном и том же спрайте контейнера.поэтому в этой ситуации я просто добавил фильтр в контейнер, а не в замаскированный спрайт большого пальца.
var thumbMask:Sprite = new Sprite();
thumbMask.graphics.beginFill(0, 1);
thumbMask.graphics.drawRoundRect(0, 0, 100, 75, 25, 25);
thumbMask.graphics.endFill();
var thumb:Sprite = new Sprite();
thumb.graphics.beginFill(0x0000FF, 1);
thumb.graphics.drawRect(0, 0, 100, 75);
thumb.graphics.endFill();
thumb.addChild(thumbMask);
thumb.mask = thumbMask;
var container: Sprite = new Sprite();
container.addChild(thumb);
container.filters = [new DropShadowFilter(0, 0, 0, 1, 20, 20, 1.0, 3)];
//if there is no filters applied or if the filters array is empty, use:
//container.cacheAsBitmap = true;
addChild(container);
container.addEventListener(MouseEvent.MOUSE_DOWN, drag);
container.addEventListener(MouseEvent.MOUSE_UP, drop);
function drag(evt:MouseEvent):void
{
evt.target.startDrag();
trace("drag");
}
function drop(evt:MouseEvent):void
{
evt.target.stopDrag();
trace("--DROP");
}