Чтобы проверить, был ли Movie Clip заполнен в одном месте - PullRequest
0 голосов
/ 15 сентября 2011

Я создал пустой видеоклип. И я это делаю. (Т.е.) Заполняю (Begin Fill) эллипсом для каждого клика.

Как проверить, заполнено ли оно в определенном месте (скажем, 400 x 400 из x = 0, y = 0)?

Ответы [ 3 ]

0 голосов
/ 15 сентября 2011

Я предполагаю, что "400 x 400 от 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, вы можете проверить, содержит ли растровое изображение какой-либо цвет или какие-либо другие цвета.Теперь проверьте, содержит ли он какой-либо другой цвет, кроме «прозрачного» (= любые другие цвета со значением альфа> 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
}
0 голосов
/ 15 сентября 2011

Предполагая, что места, где он не заполнен, прозрачны, простой 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()

0 голосов
/ 15 сентября 2011

Сначала вам нужно будет преобразовать его в формат растровых данных.
Тогда вы будете использовать функцию 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);  

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...