我试图让我的图像在AS3中看起来很棒。我想创造“移动背景”的效果。例如,我的图像是200 x 200,我的面具是200 x 40.当我悬停时,我希望背景移动并保持面具。
由于AS3没有反转掩码选项,我发现我必须使用BlendMode并将掩码添加到我的父层。我认为这就是问题所在。如果我想要更改蒙版的Y位置(我不能因为蒙版没有启用MouseEvents),它的全部或全部都没有。整个图像都降下来(包括面具),或者没有任何反应。
这是我的一些代码,我真的希望有人知道如何解决这个相当容易看的问题。啊! (我有一个负责加载图像的自定义ImageLoader类)
var imageLoader:ImageLoader = new ImageLoader();
imageLoader.url = "image.jpg";
imageLoader.blendMode = BlendMode.LAYER;
imageLoader.addEventListener(ImageLoader.IMAGE_LOADED, imageLoadedHandler);
var maskContainer:Sprite = new Sprite();
with (maskContainer.graphics) {
beginFill(0x000000);
drawRect(0, 0, 200, 40);
endFill();
}
maskContainer.blendMode = BlendMode.ERASE;
private function imageLoadedHandler(e:Event):void {
// Ofcourse, here is where the problem starts.
// I HAVE to addChild the mask to the imageLoader, so everything comes down/up.
addChild(imageLoader);
imageLoader.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
imageLoader.addChild(maskContainer);
}
private function rollOverHandler(e:MouseEvent):void {
imageLoader.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
imageLoader.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
private function mouseMoveHandler(e:MouseEvent):void{
trace("move");
imageLoader.y = e.currentTarget.mouseY;
}
提前致谢。
答案 0 :(得分:2)
我想我遇到了你遇到的问题。
问题在于您要将内容分配到imageLoader
,而是添加imageHolder Sprite
然后您可以移动位图而不是移动精灵。
我只是在Flash中快速完成了这项工作,并将IMG
添加到库中,但是您可以替换占位符+加载器,这无论如何都是理想的,因为您可以使用占位符“加载”,因为您正在动态加载内容
var imageHolder:Sprite = new Sprite();
addChild(imageHolder);
var bmp:Bitmap = new Bitmap(new IMG);
imageHolder.addChild(bmp);
var maskContainer:Sprite = new Sprite();
with (maskContainer.graphics) {
beginFill(0x000000);
drawRect(0, 0, 200, 40);
endFill();
}
imageHolder.mask = maskContainer;
imageHolder.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
function rollOverHandler(e:MouseEvent):void {
imageHolder.removeEventListener(MouseEvent.ROLL_OVER, rollOverHandler);
imageHolder.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveHandler);
}
function mouseMoveHandler(e:MouseEvent):void{
trace("move");
bmp.y = -e.currentTarget.mouseY;
}