Actionscript 3 如何在ActionScript 3中屏蔽不起作用?

Actionscript 3 如何在ActionScript 3中屏蔽不起作用?,actionscript-3,mask,Actionscript 3,Mask,我想屏蔽DisplayObject树的一些节点。我无法在我的大项目中使用掩蔽。所以我为自己建立了一个简单的例子,我发现它实际上非常有效。但我不明白为什么它在我的大项目中不起作用。我的所有可见对象都是精灵或来自扩展精灵的类 在大项目中屏蔽不起作用 我可以看到我的节点被屏蔽的正常状态 当我将遮罩添加到此节点时,我可以看到遮罩 但是,当我将mask设置为mask时,我会继续看到所有内容(纯nodeToBeMasked被屏蔽,而不是孩子们——这将更重要) 简单示例中的掩蔽效果很好 掩蔽如何停止工

我想屏蔽DisplayObject树的一些节点。我无法在我的大项目中使用掩蔽。所以我为自己建立了一个简单的例子,我发现它实际上非常有效。但我不明白为什么它在我的大项目中不起作用。我的所有可见对象都是精灵或来自扩展精灵的类

  • 在大项目中屏蔽不起作用
    • 我可以看到我的
      节点被屏蔽的正常状态
    • 当我将遮罩添加到此节点时,我可以看到遮罩
    • 但是,当我将mask设置为mask时,我会继续看到所有内容(纯
      nodeToBeMasked
      被屏蔽,而不是孩子们——这将更重要)
  • 简单示例中的掩蔽效果很好
掩蔽如何停止工作?
代码:(这不管用,大项目)

代码:(有效)

[SWF(frameRate=“60”,backgroundColor=“0xffffff”,width=“128”,height=“128”)]
公共类MaskTest扩展了Sprite
{
公共函数MaskTest()
{
addEventListener(Event.ADDED_至_阶段,OnAddedStatage);
}
AddedStatage上的私有函数(事件:事件):void
{
痕迹(阶段);
//这个
图形填充(0x00ff00,1);
graphics.drawRect(8,81112,112);
graphics.endFill();

//额外的孩子必须将面具添加到家长身上才能工作,而不仅仅用作

obj.mask = myMask; //This will not work alone
要使其工作,必须将其添加到父对象显示列表中

obj.addChild(myMask);
obj.mask = myMask;

/
这是我的大项目中的问题

maskSprite.z=0;//使用掩码避免这种情况

我只是胡乱猜测:
如果您使用属性
z
rotationX
rotationY
rotationZ
(可能更多)精灵将移动到3D空间,遮罩仅在2D中工作


我用Flash 3D做了一点实验。从2D到3D的过渡看起来非常平滑。你看不到他们什么时候“转”.

Hm,我不认为有什么神奇的方法可以告诉你真相。这取决于很多事情——你在哪里添加面具,你想掩盖什么,等等。首先,我不会试图掩盖整个舞台。相反,我会创建一些容器并掩盖它。其次,我会尝试一个接一个地添加对象,看看哪里的东西会变得一团糟。@Andreypov刚才说我尝试屏蔽一个由16x16块、1024x1024像素的正方形块构成的2D级别。我添加了这个屏蔽,但没有任何变化。我仍然可以看到所有的块。给这个最新的测试提供要点。尝试将一个屏蔽作为形状类。形状类?你是说精灵?无论如何-尝试在屏幕上添加一些简单的项目,而不是你所做的一切。不,添加I没用。在我发布这个问题之前我试过了,现在我试过了。@Battle City-它一定要被添加才能起作用。不知道我怎么会错过:)@AndreyPopov&所有的面具。它应该,但不一定。我知道如何让我的面具起作用。但我找不到面具失败的原因(需要在我的简单示例中重现)。你为什么要设置零z属性?!:不管怎样,对我来说,这听起来很合理,因为我知道Flash中的面具有多奇怪。太好了,你发现了问题!@Andreypov嗯,你知道,在我用于某些游戏的所有库中,我有自己的库,我用我经常使用的标准类进行扩展。在其中的某个地方,我有一个使用用户定义的增量自动修改x、y、z的例程,用于移动等,但sprite类被扩展并替换该例程除外。
obj.mask = myMask; //This will not work alone
obj.addChild(myMask);
obj.mask = myMask;