0

基本上,我试图通过以编程方式绘制 3 个白色矩形并让它们稍微重叠然后在每个矩形上都有一个投影来创建 3 张纸的错觉。然后我可以调整它们的大小。

如果我没有过滤器,它会工作得很好而且很清晰。但是,一旦我添加了过滤器,它们就会不准确地绘制,在某些宽度下,闪光灯会忘记渲染其中一张纸,或者经常将 X 值弄错。

关于如何解决它的任何想法?

这是我的代码:

   public function Paper():void{    
        a = new MovieClip();
        a.graphics.beginFill(0xFFFFFF);
        a.graphics.drawRect(0,0,10,stage.stageHeight+100);


        b = new MovieClip();
        b.graphics.beginFill(0xFFFFFF);
        b.graphics.drawRect(0,0,10,stage.stageHeight+100);


        c = new MovieClip();
        c.graphics.beginFill(0xFFFFFF);
        c.graphics.drawRect(0,0,10,stage.stageHeight+100);
        this.addChild(c);
        this.addChild(b);
        this.addChild(a);

        b.filters = c.filters = a.filters = [new DropShadowFilter(5,90,0,0.6,10,10,1,4)];
        this.width = 800;

        b.y = 2;
        c.y = 4;
        this.y = 40;            
    };  

    public override function set width(value:Number):void{
        a.width = value;
        b.width = value+4;
        c.width = value+8;

        a.x = stage.stageWidth - a.width;
        b.x = a.x -2;
        c.x = a.x -4;       
    };

public function animateToWidth(target:Number):void{
        new GTween(this,0.5,{width:target},{ease:Sine.easeInOut});          
    };

我尝试将宽度设置器中的值四舍五入,以防它是由十进制值引起的,但它没有效果。基本上,如果我注释掉过滤器的代码行,它可以完美地工作,但是一旦我突然启用过滤器,闪光灯就无法正确定位矩形

这是两个不同宽度的示例,请注意每个白色矩形在每个步骤之间如何有 2px,而在另一个中,底层有 4 个像素,而中间层只有 1 个像素:

在此处输入图像描述 在此处输入图像描述

有任何想法吗?我希望避免使用图像数据,但我想我可能只需要补间图形。

谢谢

4

0 回答 0