divinus, только что так вроде и выкрутилась. Правда с threshold провозилась часа два, какой-то он непонятный. Так и не разобралась до конца как он работает.
В общем вот такой пока не оттестированный вариант:

Код AS3:
// контейнер для карты
public class EnvironmentContainer extends Sprite
{
private var mask_layer : Sprite;
private var bmp_data : BitmapData;
public function EnvironmentContainer(){
super();
mask_layer = new Sprite();
this.addChild(mask_layer);
mask_layer.y = 0;
this.hitArea = mask_layer;
mask_layer.alpha = 0;
}
// удаляем все что было и заливаем поле зеленым (прозрачным не работает :( )
public function clearAll(width :Number, height:Number):void{
while(this.numChildren>0) this.removeChildAt(this.numChildren - 1);
mask_layer = new Sprite();
this.addChild(mask_layer);
mask_layer.y = 0;
mask_layer.alpha = 0;
mask_layer.graphics.beginFill(0xff00);
mask_layer.graphics.drawRect(0, 0, width, height);
mask_layer.graphics.endFill();
}
// рисуем синим маску для прямоугольного элемента карты
public function addMask(_x:Number, _y:Number, _width:Number, _height :Number):void{
mask_layer.graphics.beginFill(0xff);
mask_layer.graphics.drawRect(_x, _y, _width, _height);
mask_layer.graphics.endFill();
}
// когда все добавлено делаем битмапдату
public function init():void{
bmp_data = new BitmapData(this.width, this.height);
bmp_data.draw(mask_layer);
trace(bmp_data.width, bmp_data.height);
}
// для данного прямоугольника возвращает со сколькими пикселями припятствий он пересекся
public function intersectCount(rect:Rectangle):int{
var bmp :BitmapData = new BitmapData(rect.width, rect.height);
var n :uint = bmp.threshold(bmp_data, rect, new Point(), "==", 0xffffff, 0xff, 0xff, true);
bmp.dispose();
return n;
}
}
Кривовато как-то

В общем как-то так.
Буду рада замечаниям
