Надеюсь, я правильно понял ваш вопрос.
Может быть вариант, который использует copypixels для достижения того, что вы хотите.Вы можете использовать значение bitmapdata.rect, чтобы определить размер сэмпла, который вам нужен, и пройти по большему растровому изображению, используя прямоугольник и движущуюся точку.Давайте посмотрим, смогу ли я это закодировать ...
function findBitmapInBitmap(tinyimg:BitmapData, largeimg:BitmapData):Point {
var rect:Rectangle = tinyimg.rect;
var xbound:uint = largeimg.rect.width;
var ybound:uint = largeimg.rect.height;
var imgtest:BitmapData = new BitmapData(tinyimg.rect.width, tinyimg.rect.height);
for (var ypos:uint = 0, y <= ybound, y++) {
for (var xpos:uint = 0, x <= xbound, x++) {
imgtest.copyPixels(largeimg, rect, new Point(xpos, ypos);
if (imgtest.compare(tinyimg) == 0) return new Point(xpos, ypos);
}
}
return new Point(-1,-1); // Dummy value, indicating no match.
}
Что-то в этом роде должно работать - я уверен, что есть место для элегантности кода и возможной оптимизации.Однако, похоже, что этот метод будет очень медленным, так как вам придется проверять каждый пиксель на совпадение.
Есть лучший способ.Разделите ваше большое изображение на слои и используйте технику блитинга для их компоновки во время выполнения.В вашем случае вы можете создать наземную текстуру без спутников, а затем создать спутники отдельно и использовать метод copyPixels, чтобы разместить их там, где вы хотите.Google "блин в as3", чтобы найти хорошие учебники.В настоящее время я работаю над игровым проектом, который использует эту технику, и это очень хороший метод.
Удачи!
Редактировать: Забыли код в выражении возврата по умолчанию.Используя этот метод, вам нужно будет вернуть недопустимую точку (например, (-1, -1)) и проверить ее вне функции.В качестве альтернативы, вы можете просто скопировать свое маленькое растровое изображение в большое в пределах функции, что было бы гораздо более логичным, но я не знаю ваших требований.