2015-09-07 44 views
1

我想屏蔽另一個圖像,以便通過屏蔽的圖像查看未屏蔽圖像的特定部分。我的問題是,我什麼都看不到屏幕上的..沒有圖片,沒有任何影響屏蔽圖像不顯示在AS3中

cardMask = new Image(Root.assets.getTexture("card_mask")); 
cardMask.y = Constants.STAGE_HEIGHT*0.40; 
cardMask.x = Constants.STAGE_WIDTH *0.48; 
trace("it's add mask"); 
cardLight = new Image(Root.assets.getTexture("card_light_mask")); 
cardLight.y = Constants.STAGE_HEIGHT*0.46; 
cardLight.x = Constants.STAGE_WIDTH *0.48; 
cardLight.mask=cardMask; 
maskedDisplayObject = new PixelMaskDisplayObject(-1,false); 
maskedDisplayObject.addChild(cardLight); 
maskedDisplayObject.x=cardLight.x; 
maskedDisplayObject.y=cardLight.y; 
maskedDisplayObject.mask=cardMask; 
maskedDisplayObject.blendMode = BlendMode.SCREEN; 
addChild(maskedDisplayObject); 
+0

請解釋一下你的願望。顯然,'maskedDisplayObject'應該始終可見,'cardLightMask'應該是一個被「看透」的圖像。對?另外,請確保沒有顯示對象用於遮蓋多個對象[masking](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#mask)明確指出分配給掩蔽多個對象的一個​​顯示對象將只掩蓋最後一個。同時檢查提供的代碼是什麼,this.stage不是null。 – Vesper

+0

是的,maskedDisplayObject應該始終可見,但事實並非如此。屏幕上沒有顯示任何內容.. – Amna

回答

0

首先,掩蓋mask對象也應加入到顯示列表中的對象。您的代碼不會添加cardMask以在任何地方顯示列表。其次,如果您的maskedDisplayObject應始終可見,則不應將遮罩分配給它,而是分配給您希望控制顯示部分的其他對象。第三,this.stage也可能爲空,因此整個樹(this -> maskedDisplayObject -> cardLight)不會呈現。你需要檢查所有這三個條件才能顯示出來。

另外,如果你的願望cardLight爲對象,以獨立的maskedDisplayObject移動,你應該把它添加到this代替,並檢查它顯示的maskedDisplayObject頂部(稱之爲addChild(maskedDisplayObject)addChild(cardLight))。

這所有總量這段代碼:

trace("Stage is null:", (this.stage==null)); // if this outputs true, you're out of display 
cardMask = new Image(Root.assets.getTexture("card_mask")); 
cardMask.y = Constants.STAGE_HEIGHT*0.40; 
cardMask.x = Constants.STAGE_WIDTH *0.48; // mask creation unaltered 
trace("it's add mask"); 
cardLight = new Image(Root.assets.getTexture("card_light_mask")); 
cardLight.y = Constants.STAGE_HEIGHT*0.46; 
cardLight.x = Constants.STAGE_WIDTH *0.48; 
cardLight.mask=cardMask; // this is right 
maskedDisplayObject = new PixelMaskDisplayObject(-1,false); 
// maskedDisplayObject.addChild(cardLight); this is moved to main part of display list 
maskedDisplayObject.x=cardLight.x; 
maskedDisplayObject.y=cardLight.y; 
// maskedDisplayObject.mask=cardMask; NO masking of this, you're only masking cardLight 
cardLight.blendMode = BlendMode.SCREEN; // display mode is also changed 
addChild(maskedDisplayObject); 
addChild(cardLight);