Flash IDE 的遮罩在 reparentting 後的問題
遇到一個問題,在 Flash IDE 中的時間軸上所設計的遮罩,若是用程式將他 reparentting 後,會導致在新的 container(該遮罩的parent) 中,所有 child index 在該遮罩之上的 display object,都會被該遮罩所遮到。
下圖是 UI 的配置,mask_mc 遮 contain_mc,在這組遮罩的上下各有一個 green_mc 與 blue_mc:
以下是程式碼,主要工作是建立一個新的 mc1 放到 MainTimeline 上,然後將 MainTimeline 上的所有 DisplayObject 都移進 mc1 中,並在動作前後都作一些 trace:
var mc1:MovieClip = new MovieClip();
mc1.name = "NewContainer";
addChild(mc1);
function traceInfo(container:DisplayObjectContainer):void{
trace("traceInfo()", container.name);
for(var i:int=0; itrace(i, container.getChildAt(i).name);
}
trace("");
}
trace("初始時的 MainTimeline");
traceInfo(this);
for(var i:int = numChildren-1; i>=0; i--){
var obj:DisplayObject = getChildAt(i);
if(obj!=mc1){
mc1.addChildAt(obj, 0);
}
}
_mc.getC
trace("reparentting 後的 MainTimeline");
traceInfo(this);
trace("reparentting 後的 NewContainer");
traceInfo(mc1);
var yellowLine:MovieClip = new YellowLine();
yellowLine.name = "yellowLine";
mc1.addChild(yellowLine);
trace("在 NewContainer 新加入 DisplayObject 後");
traceInfo(mc1);
執行後的畫面:

從第一段 trace 可以看出,在 Flash IDE 中所設計的遮罩,從 child index 來說,mask_mc (index=1) 會在 content_mc (index=2) 的下面。
第三、四段 trace 可以看出,所有 DisplayObject 在移動前後的 child index 都是沒有改變的,但是從畫面上來看,除了 blueLine (index=0) 之外的所有 DisplayObject 都會被 mask_mc 所遮蔽,即使是最後用程式加入的 yellowLine (index=4) 也不例外。
感覺上,Flash IDE 設計的遮罩,會將 child index 在其上面的 DisplayObject 都遮蔽,或許還會有一個變數來定義遮多少個(亂猜的),而當 reparentting 後為何會影響到所有在其上的物件,這點我還沒想出來。
正在研究 DisplayObject.mask 的相關說明,不過有可能 Flash IDE 設計的遮罩有不同的實作方式也說不一定。
0 意見:
張貼意見