我正在尝试将位图1与位图2进行比较,如果它们等于0,我希望它们能够执行某些操作。所以为了看到它的回归,我添加了一条痕迹。但似乎它正在寻找与我的预期完全不同的东西。这是代码:
var scratch_c : Scratch_card = new Scratch_card ();
var backgr: Background = new Background ();
var mouseclick:Number;
var masking:Sprite = new Sprite()
var bmd1:BitmapData = new BitmapData(742, 165);
var bm:Bitmap = new Bitmap(bmd1);
addChild (bm);
bm.x=20;
bm.y=40;
bmd1.draw(scratch_c);
var bmd2:BitmapData = new BitmapData(742, 165);
var bm2:Bitmap = new Bitmap(bmd2);
addChild (bm2);
bm2.x=20;
bm2.y=40;
bmd2.draw(backgr);
bm2.mask = masking;
addChild(masking);
stage.addEventListener(MouseEvent.MOUSE_DOWN, Pressing);
stage.addEventListener(MouseEvent.MOUSE_MOVE, Moving);
stage.addEventListener(MouseEvent.MOUSE_UP, Lifting);
function Pressing(event:MouseEvent):void {
mouseclick = 1;
}
function Moving(event:MouseEvent):void {
if (mouseclick == 1) {
masking.graphics.beginFill(0x000000);
masking.graphics.drawEllipse(mouseX, mouseY, 70, 60);
masking.graphics.endFill();
}
}
function Lifting(event:MouseEvent):void {
trace(bmd1.compare(bmd2));
mouseclick = 0;
}
这是追踪
的原因如何比较bmd1和bmd2的像素? 为什么不返回数字?
答案 0 :(得分:3)
不是百分比,但它应该返回一个可以指定为图像的新BitMapData对象。 BitMapData.compare()
返回Object - 如果两个BitmapData对象具有相同的尺寸(宽度和高度),则该方法返回一个新的BitmapData对象,该对象具有两个对象之间的差异(请参阅主要讨论)。如果BitmapData对象是等效的,则该方法返回数字0.如果BitmapData对象的宽度不相等,则该方法返回数字-3。如果BitmapData对象的高度不相等,则该方法返回数字-4。
取自here
结果:
你的位图不等同,这就是你得到一个由2个不同位图组成的对象的原因。
答案 1 :(得分:1)
你试过吗
if(bmd1.compare(bmd2) == bmd2){
// complete
}
然而,在看了一下你的代码之后。我认为你需要测试掩蔽而不是bmd1
就像这样。
var mymask:BitmapData = new BitmapData(742, 165, true,0x000000000);
mymask.draw(masking);
if(mymask.compare(bmd2) == bmd2){
// complete
}
未经测试的代码,但应该让您走上正确的道路