Actionscript 3 用ActionScript3制作的空中面具

Actionscript 3 用ActionScript3制作的空中面具,actionscript-3,air,mask,Actionscript 3,Air,Mask,我试图在ActionScript3(我使用的是Flex AIR框架)中在圆形上做一个遮罩。这与生态足迹有关,每个圆圈代表一个地球。 这张生态足迹图片在一个容器内。问题是,尽管图片浮动,但遮罩似乎是固定的。当我向下滚动容器时,图片会很好地滚动,但遮罩不会,会将图片顶部剪掉。 我把这个和其他UIMovieClip放在一个VBox容器中。该VBox容器位于另一个VBox容器中。如果我将fomer VBox容器放在后者的底部,则遮罩将不会与之匹配,因此圆不会被遮罩 mask = new UIMovieC

我试图在ActionScript3(我使用的是Flex AIR框架)中在圆形上做一个遮罩。这与生态足迹有关,每个圆圈代表一个地球。 这张生态足迹图片在一个容器内。问题是,尽管图片浮动,但遮罩似乎是固定的。当我向下滚动容器时,图片会很好地滚动,但遮罩不会,会将图片顶部剪掉。 我把这个和其他UIMovieClip放在一个VBox容器中。该VBox容器位于另一个VBox容器中。如果我将fomer VBox容器放在后者的底部,则遮罩将不会与之匹配,因此圆不会被遮罩

mask = new UIMovieClip();
mask.graphics.beginFill(0xFFFFFF);
mask.graphics.drawRect(radius,radius+radius*2*(1-(ecoWeight-Math.floor(ecoWeight))),1000,1000);
mask.graphics.endFill();    
earth = new UIMovieClip();    
earth.graphics.beginFill(0xFFFFFF);
earth.graphics.drawCircle(radius,radius,radius);
earth.mask=mask;
earth.graphics.endFill();

面具会吸人,而且经常做不到人们期望的事情。BlendMode.ALPHA与BlendMode.LAYER结合使用,我的运气要好得多。

我不知道Flex,我使用Flash CS3,但尝试添加一个事件侦听器来重新定位掩码。 另外,试着确保你的做事顺序正确。应用遮罩,然后将所有内容放入第二个VBox中。 换句话说,我对Actionscript(有限的)经验教会了我时间顺序很重要

另外,确保所有变量都有正确的目标。在Flash CS3中(同样,我可能会胡言乱语),如果你点击一个包含子元素的MovieClip,并且你没有专门为子元素关闭鼠标,那么父元素将不会注册事件


祝你好运

将掩码添加到VBox容器:

myVBox.addChild(mask);
var bundle:Sprite = new Sprite();

mask = new UIMovieClip();
...

earth = new UIMovieClip();    
...

bundle.addChild(mask);
bundle.addChild(earth);

myVBox.addChild(bundle);

bundle.x = 100;
bundle.y = 100;
或者将遮罩和形状放入容器中,然后移动容器:

myVBox.addChild(mask);
var bundle:Sprite = new Sprite();

mask = new UIMovieClip();
...

earth = new UIMovieClip();    
...

bundle.addChild(mask);
bundle.addChild(earth);

myVBox.addChild(bundle);

bundle.x = 100;
bundle.y = 100;
这将把地球和面具固定在一起。我不熟悉UIMovieClip,但我想你可以用UIMovieClip替换精灵。这是一个比第一个更好的解决方案,因为如果你不把它们捆绑在一起,你就不太可能记得把面具取下来


希望这有帮助。

谢谢!这很有道理。我要试试:-也许这不是正确的答案,但我用BlendMode.ERASE和BlendMode.LAYER做了,而且防御起来更容易。