掩盖2个动画片段

时间:2014-08-27 17:36:16

标签: actionscript-3 flash

我正试图让我的篝火影片剪辑遮住我的夜影影片剪辑,因此它不会通过删除影片剪辑的那一部分来显示夜晚的“黑暗”。它擦除了它,但不仅仅是影片剪辑的大小,它擦除了它的所有内容:D

我已经尝试将它放在关卡而不是world.worldTiles中并将其从数组中取出但它仍然会做同样的事情。我也尝试将它放在影片剪辑的world.worldTiles[i]上,仍然删除整个影片剪辑。我翻转.mask = night左右,它只遮蔽了篝火模型。

这是我正在使用的代码:

    public function addWorldObj(obj:MovieClip, c:Class, X:int, Y:int, w:Number, h:Number, f:int)
    {
        obj = new c();
        world.worldTiles.addChild(obj);
        obj.x = playerTileCoord.x + X;
        obj.y = playerTileCoord.y + Y;
        obj.width = w;
        obj.height = h;
        obj.gotoAndStop(f);
        if(obj.Name == "campfire"){
                obj.mask = night;
        }
        world.tilesInWorld.push(obj);
    }

夜影影片剪辑只是一个巨大的黑色方块,阿尔法变化了。

篝火是一个看不见的广场,里面画着篝火,篝火的宽度和高度都是1平方的大小,它应该掩盖夜间阴影影片中的1个方块,但它掩盖了所有这一切。

这是游戏的链接。 http://www.fastswf.com/00CRfh4 游戏开始于0.75 alpha向上计数。 您可以单击屏幕右下角的锤子打开构建菜单(您也可以单击“E”按钮,此刻也会为了测试目的而杀死您)一旦打开,请单击篝火文本并将其放在某处地图,并观看它掩盖了整晚的电影剪辑! :d

2 个答案:

答案 0 :(得分:1)

我假设夜间电影剪辑是舞台的大小(可能更大),并且通过将其用作 蒙版,它会消失,因为蒙版是隐形的。这就是你打电话obj.mask = night时消失的原因。另外,调整蒙版的alpha属性对该蒙版没有影响,因为正如我所提到的,蒙版是不可见的。

现在您有几个选择:

  1. 实施与您已有的完全不同的东西,以减轻篝火周围的区域。我的意思是,如果你希望篝火周围的区域被点燃,并且当你离篝火越来越远时逐渐淡出到夜晚。
  2. 如果你不关心照亮篝火周围的区域,但是由于夜间层,现在篝火现在看起来很暗,也许你可以尝试将篝火对象放在夜间层之上。

答案 1 :(得分:1)

所以我遇到的问题是掩盖并不完全是我想要的,而是我使用了BlendMode.Erase

    public var spr:Sprite = new Sprite();
    var msk:Sprite = new Sprite();


    private var gType:String;  
    private var matrix:Matrix;  

    private var bound:Sprite;



    public function addNight()
    {
        spr.alpha = .85;

        spr.graphics.beginFill(0x000000);
        spr.graphics.drawRect(0,0 ,800,600);
        spr.graphics.endFill();

        prnt.addChild(spr);

        spr.blendMode = BlendMode.LAYER;
    }



    public function addLight(x:int, y:int)
    {
        var gType:String = GradientType.RADIAL;  

        var matrix:Matrix = new Matrix();  
        matrix.createGradientBox(300,300,0,0,0);    

        var gColors:Array = [0xFFFFFF, 0x000000];  
        var gAlphas:Array = [.9,0];  
        var gRatio:Array = [0,255];  

        var bound:Sprite = new Sprite();  
        bound.graphics.beginGradientFill(gType,gColors,gAlphas,gRatio,matrix);  
        bound.graphics.drawCircle(150,150,150);
        bound.x = bound.y = 0;  

        bound.x = x;
        bound.y = y;
        bound.blendMode = BlendMode.ERASE;
        spr.addChild(bound);
    }