比较位图无效

时间:2013-02-18 18:19:06

标签: actionscript-3

我正在尝试将位图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;
}

这是追踪Trace:

的原因

如何比较bmd1和bmd2的像素? 为什么不返回数字?

2 个答案:

答案 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
}

未经测试的代码,但应该让您走上正确的道路