根据第三层的位置看穿第二层-Flash

See through the second layer according the position of the third one - Flash

我是新来的,如果我的问题很愚蠢,对不起我的英语。 我的问题是我有如下图所示的三层。

"Layer 1" 的背景是蓝色,"Layer 2" 的颜色是绿色。第 3 层具有透明背景的图像。我想根据图像边距删除第二层。无论我将图像移动到哪里,我都需要删除第二层。想要的结果显示在第二张图片上。

您需要为您的对象命名,以便您可以针对它们进行编程。因为空格会产生错误的变量名,所以让我们按如下方式调用您的对象:

  • 第 1 层 = blue
  • 第 2 层 = green
  • 第 3 层 = person

解决方案

您需要一个遮罩,但与普通遮罩不同,您需要遮罩形状的反面(即,内部是 隐藏 而不是内部是 显示)。您可以使用 BlendMode.ERASE 实现此目的。然后,这只是匹配 person 的位置和尺寸的问题;每当您移动 person 时,也会更新遮罩的位置。

function make(color:uint, width:Number, height:Number, x:Number = 0, y:Number = 0, existingShape:Sprite = null):Sprite {
    // Helper function to make squares.  Will create a new one, or draw on one provided.
    var s:Sprite;
    if (existingShape != null) {
        s = existingShape;
    } else {
        s = new Sprite();
    }
    s.graphics.beginFill(color, 1);
    s.graphics.drawRect(x, y, width, height);
    s.graphics.endFill();
    return s;
}

// Layer 1
var blue:Sprite = make(0x3f48cc, 250, 400);
addChild(blue);

// Layer 2
var green:Sprite = make(0x00cc99, 250, 400);
addChild(green);
green.blendMode = BlendMode.LAYER;

// Layer 3
var person:Sprite = make(0xea0502, 20, 100, 20); // arms
make(0xea0502, 60, 20, 0, 20, person); // head and legs
addChild(person);
person.x = 95;
person.y = 150;

// This is the mask.  It must be a child of the object it is masking.
var boundary:Sprite = make(0xff00e4, person.width, person.height);
green.addChild(boundary);
boundary.x = person.x;
boundary.y = person.y;
boundary.blendMode = BlendMode.ERASE;

结果