我創建了一個精靈來拖放舞臺。精靈被蒙上了屏幕,並且它的面具是小孩子,因此它也會隨精靈一起拖動。一切正常,直到我添加陰影過濾器的精靈。當添加投影時,如果鼠標事件發生在精靈原始位置並添加到舞臺上時,我只能用鼠標拖動鼠標並拖動精靈。ActionScript使用蒙版和過濾器拖放顯示對象?
我該如何解決這個問題?這可能是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時,你 應用濾鏡對顯示對象 (當其過濾器陣列不爲空時), 並且如果顯示對象具有應用於其的過濾器 ,則即使將屬性 設置爲false,cacheAsBitmap也會被報告爲 對象爲 對象。如果清除顯示對象 的所有過濾器,則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");
}
雖然這仍然是一個未解之謎,我設法一起解決了一個解決方案。我做的是從拖動的蒙面精靈中移除陰影。我創建了一個相同大小的精靈,並將它放置在顯示列表上的可拖動的蒙版精靈下面。我已經將陰影添加到了這個新圖層,而不是蒙版精靈。新的投影層通過爲每個MOUSE_DOWN和MOUSE_UP分別添加和刪除Event.ENTER_FRAME來跟蹤被遮罩的精靈。此輸入框架事件將調用一個新的函數,該函數將遮罩的Sprite和新的投影影子精靈對齊。 – TheDarkIn1978 2010-06-13 12:17:14