屏蔽图像不显示在AS3中

问题描述:

我想屏蔽另一个图像,以便通过屏蔽的图像查看未屏蔽图像的特定部分。我的问题是,我什么都看不到屏幕上的..没有图片,没有任何影响屏蔽图像不显示在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

首先,掩盖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);