我想屏蔽我的DisplayObject树的一些节点。我无法在我的大项目中进行掩蔽工作。所以我为我建立了一个简单的例子,我看到它的效果非常好。但我无法弄清楚为什么它在我的大项目中不起作用。我的所有可见对象都是Sprite,或者来自扩展Sprite的类。
nodeToBeMasked
nodeToBeMasked
被屏蔽但不是孩子 - 这将更加重要)屏蔽如何停止工作?
<小时/> 代码: (不起作用,大项目)
// custom class extends Sprite
override protected function onAddToStage(event:Event):void
{
trace(stage); // stage exists
var maskSprite:Sprite = new Sprite();
maskSprite.graphics.beginFill(0xffff00, 1);
maskSprite.graphics.drawCircle(0, 0, 64);
maskSprite.graphics.endFill();
maskSprite.x = 64;
maskSprite.y = 64;
if (true)
{
this.addChild(maskSprite); // doesn't help
this.mask = maskSprite; // I can see EVERYTHING here, inside and outside the cirle
}
else
addChild(maskSprite); // I can see the mask here
}
代码: (有效)
[SWF(frameRate="60",backgroundColor="0xffffff",width="128",height="128")]
public class MaskTest extends Sprite
{
public function MaskTest()
{
addEventListener(Event.ADDED_TO_STAGE, onAddedToStage);
}
private function onAddedToStage(event: Event): void
{
trace(stage);
// this
graphics.beginFill(0x00ff00, 1);
graphics.drawRect(8, 8, 112, 112);
graphics.endFill();
// extra childs <- ^^
for (var i: int = 0; i < 100; i++)
{
var child: Sprite = new Sprite();
child.graphics.beginFill(uint(Math.random() * 0x1000000), 1);
child.graphics.drawRect(Math.random() * 64, Math.random() * 64, 64, 64);
child.graphics.endFill();
addChild(child);
}
// mask
var maskSprite: Sprite = new Sprite();
maskSprite.graphics.beginFill(0xffff00, 1);
maskSprite.graphics.drawCircle(0, 0, 64);
maskSprite.graphics.endFill();
maskSprite.x = 64;
maskSprite.y = 64;
// switch to check the mask
if (true)
this.mask = maskSprite;
else
addChild(maskSprite);
}
}
更新
我发现我的自定义类(它是root,只负责Event.ENTER_FRAME
更新)导致了问题。我不知道为什么,但是通过在我的所有项目中禁用z更新解决了maskedNode
未被屏蔽的孩子。
答案 0 :(得分:1)
必须将掩码添加到父级才能工作,不仅用作
obj.mask = myMask; //This will not work alone
要使其正常工作,必须将其添加到父对象显示列表
obj.addChild(myMask);
obj.mask = myMask;
答案 1 :(得分:1)
//
的 this was
强> the problem in my big project
maskSprite.z = 0; // avoid this with masks
我只是一个疯狂的猜测:
如果您使用属性z
,rotationX
,rotationY
,rotationZ
(也许更多)精灵被转移到3D空间,而掩模只能在2D中工作。
我已经尝试了一下Flash 3D。从2D到3D的过渡看起来非常流畅。你无法看到他们何时“转身”。