未在AS3中显示的蒙版图像

时间:2015-09-07 08:08:17

标签: actionscript-3 starling-framework

我试图将图像掩盖在另一个图像上,以便我只通过蒙版图像查看未屏蔽图像的特定部分。我的问题是我在屏幕上看不到任何东西..没有图像,根本没有效果

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);

1 个答案:

答案 0 :(得分:0)

首先,为了屏蔽对象,还应将mask对象添加到显示列表中。您的代码不会在任何地方添加cardMask到显示列表。其次,如果您的maskedDisplayObject应始终可见,则应将面具分配给它,而不是指定显示您想要控制的部分的其他对象。第三,this.stage也可能为空,因此整个树(this -> maskedDisplayObject -> cardLight)都不会呈现。您需要检查所有这三个条件才能显示某些内容。

此外,如果您希望cardLight作为对象独立于maskedDisplayObject移动,则应将其添加到this,并检查它是否显示在maskedDisplayObject之上}(在addChild(cardLight)之后调用addChild(maskedDisplayObject)

此代码的所有总计:

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);