根据第三层的位置看穿第二层-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;
结果
我是新来的,如果我的问题很愚蠢,对不起我的英语。 我的问题是我有如下图所示的三层。
您需要为您的对象命名,以便您可以针对它们进行编程。因为空格会产生错误的变量名,所以让我们按如下方式调用您的对象:
- 第 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;
结果