2012-04-10 76 views
2

我意識到這是一個總的新手問題,但它是讓我瘋狂的......如何以編程方式刪除在Flash Professional中定義的遮罩?

在Flash Professional中我有一個影片剪輯,比如說1000px高和50px寬。我已經將它包含在掩模層(下)中,掩模層高100px,寬50px。在我的程序中,我垂直移動影片剪輯,並且如預期的那樣將其屏蔽,這樣我只能看到100px垂直。

我的問題是:如何從我的影片剪輯中刪除蒙版?當我調試檢查Flash Builder中的影片剪輯時,其.mask屬性爲null。但它蒙面...

我在想什麼?

由於提前,

格雷格

+0

不過除去掩膜還沒有找到這個答案,可惜我做不到甚至在Adobe論壇上發佈,自從截至昨天(2014年5月15日)以來,Adobe Cloud Services在全球範圍內癱瘓。無法登錄論壇或應用程序。史詩失敗。一旦我找出了使用authortime mask的情況,我會在這裏發佈一個答案。 – Triynko 2014-05-15 21:08:06

回答

0

檢查面具是通過動作的影片剪輯的父:

MovieClip(movicClipInstanceName_mc.parent).mask 

而如果再將它設置爲... .mask = null;

通常我在時間線上聲明的任何掩碼都不會在我的AS代碼中混淆,因爲對於我來說,我認爲它是永久性條件。如果您希望稍後以編程方式更改,我建議在AS代碼中設置mask屬性。

movicClipInstanceName_mc.mask = someOtherMovieClipInstanceThatIsMyMask_mc; 

對我來說,這樣做感覺更清潔,我覺得我有更多的控制權。

+0

感謝您的回覆,不幸的是,父母的面具也爲空。父母是這種情況下的主要影片剪輯/舞臺。我的蒙面影片剪輯有一個實例名稱,我甚至試圖讓蒙版本身成爲一個影片剪輯。沒有運氣......一個遮罩層似乎根本不對應.mask屬性(據我所知) – Greg 2012-04-10 16:13:52

0

一個實例名稱的大影片剪輯(比如big_mc),然後

big_mc.mask = null; 
+0

謝謝..影片剪輯已經有一個實例名稱。 .mask爲null。有關更多信息,請參閱我對ToddBFisher的回覆。 – Greg 2012-04-10 16:15:29

1

格雷格是對的。你會認爲你可以通過DisplayObject的mask屬性訪問在Flash IDE中設置的掩碼,但是你不能。在flash中設置的掩碼在actionscript中始終爲空。

除去面具的哈克版本是,你可以嘗試

displayObjectWithMaskOnIt.parent.removeChild(displayObjectWithMaskOnIt) 

然後

displayObjectWithMaskOnIt.parent.addChild(displayObjectWithMaskOnIt). 
+0

更好的解決方案是從顯示列表中刪除蒙版本身。 – Gio 2013-06-18 12:27:23

+0

問題是掩碼不在顯示列表中。例如,我有一個用位圖(一個精靈圖標)定義的符號,然後它被一個只有一個矩形的圖層掩蓋。在運行時,實例具有空的掩碼,並且它包含的唯一子元素是兩個Shape對象...所以我甚至不知道它是如何顯示位圖的,除非它在編譯時實際將其柵格化爲某種靜態Shape對象。顯然有一些令人討厭和神祕的優化發生。 – Triynko 2014-05-15 21:05:03

0

http://forum.starling-framework.org/topic/weird-how-to-read-mask-info-from-an-swf-file

這是非常簡單的:mask屬性是比時間線蒙版完全不同的蒙版 。

mask屬性允許您使用任何對象作爲其他任何對象的掩碼(只要記住將它們放在同一個顯示樹上或 將會變得無意義)。

時間線蒙版將特定範圍的深度指定爲由特定對象屏蔽 。

這兩個系統根本不通信,但他們做同樣的工作。

如果您想訪問 時間線蒙版,最好帶上您的swf分析器或jsfl。

所以時間線掩碼使用不同的機制,與掩碼屬性分開。這就是爲什麼你不能訪問它們。正如其他人所提到的,您可以通過刪除和添加子項來間接禁用時間線掩碼,但是很少解析SWF文件,我不認爲有任何方法可以檢測對象是否在第一個時間線掩碼中被掩蓋地點。

0

我知道這不是你正在尋找的答案,但是這會消除面具。 如果創建一個單獨的夾推掩模到它會刪除從它被前掩蔽對象的屏蔽,

例如...

object1.mask =掩碼;

然後將您的代碼添加到新對象 object2.mask = mask1;

因爲一個對象只能在一個時間遮罩的對象,現在會掩蓋新的對象,有效地從舊的對象