检查Movie Clip是否在一个地方填满

时间:2011-09-15 03:14:11

标签: actionscript-3

我创建了一个空的影片剪辑。 而且,我刷它。(即)每次点击都用椭圆填充(开始填充)。

如何检查它是否在特定位置填充。(比如400 x 400,x = 0,y = 0)?

3 个答案:

答案 0 :(得分:0)

首先,您需要将其转换为bitmapdata格式 然后你将使用函数getPixel来查询它。

import flash.display.Bitmap;  
import flash.display.BitmapData;  

// Lets say drawingpad is a MovieClip that is getting ellipses drawn on it.  
var bitmap:Bitmap = new Bitmap(new BitmapData(stage.stageWidth,stage.stageHeight));  
bitmap.draw(drawingpad);  
var value:uint = bitmap.bitmapData.getPixel(400,400);  

希望这有帮助

答案 1 :(得分:0)

我假设“400 x 400 from x = 0,y = 0”表示0,0到400,400之间的区域。

您需要将MovieClip矩形的内容复制到位图,才能获取有关其像素的信息。

// coordinates as in the question's example, could be method parameters
var x1:int=0;  
var y1:int=0;
var x2:int=400;
var y2:int=400;

// bitmap with transparency, with a size of the rectangle to check
var bitmap:Bitmap = new Bitmap(new BitmapData(x2-x1, y2-y1, true, 0x00000000)); 
// draw the painted mc to the bitmap, displaced to upper left x and y
bitmap.draw(mc, new Matrix(1,0,0,1,-x1,-y1)));

使用getColorBoundsRect,您可以检查位图是否包含颜色,或者是否包含任何其他颜色。现在检查它是否包含除“透明”之外的任何其他颜色(=任何其他颜色的alpha值> 0):

var maskColor:uint = 0xFF000000; // ignore rgb, only check alpha values
var color:uint = 0x00000000; // 'empty', fully transparent color
// get a rect containing all pixels with not fully transparent colors
var colorBoundsRect:Rectangle = bitmap.getColorBoundsRect(maskColor, color, false);
if (colorBoundsRect.width == 0 && colorBoundsRect.height == 0){
    trace("empty"); // rect contains no visible pixels
}

答案 2 :(得分:0)

假设未填充的地方是透明的,那么简单的hitTestPoint应该可以解决问题:

myObj.hitTestPoint( 400.0, 400.0, true ); // true means we use the pixels of the shape and not the bounding box

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#hitTestPoint()