Просмотр полной версии : узнать квадрат непрозрачной части кадра
climfree
02.09.2014, 15:09
Здравствуйте!
Помогите, поалуйста, решить такую задачку.
Есть спрайт в котором анимация где в первом кадре спрятан мувик длительностью 15 кадров. в каждом кадре изображение может быть разного размера. вот как имея только этот спрайт узнать у какой картинки самый большой квадрат непрозрачной части?
мувик пока не добавляю. если нужно - скину и его.
старалась объяснить более понятно, не знаю как получилось))
Zebestov
02.09.2014, 15:22
Повесить слушатель на ENTER_FRAME этого 15-кадрового мувика, в каждом кадре брать его getBounds() и производить проверку по критериям "самый большой квадрат" и запоминать нового победителя (номер кадра, сами габариты, что там еще).
getBounds дает не слишком точные результаты, тк прозрачные элементы тоже учитывает.
Я для выбора оптимальных областей для растеризации клипов использую
bmd.getColorBoundsRect (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#getColorBoundsRect())(0xFF000000, 0xFF000000).
Сначала, естественно, нужно растеризовать кадр.
Навскидку примерно так:
function getFrameBoundsList(mc:MovieClip):Vector.<Rectangle>
{
var numFrames:int = mc.totalFrames;
var list:Vector.<Rectangle> = new Vector.<Rectangle>();
for(var i:int = 1; i <= numFrames; i++)
{
var frameRect:Rectangle;
mc.gotoAndStop(i);
frameRect = getPixelBounds(mc);
list.push(frameRect);
}
return list;
}
function getPixelBounds(sprite:Sprite):Rectangle
{
var rect:Rectangle;
var resRect:Rectangle;
var bmd:BitmapData;
var matrix:Matrix;
rect = sprite.getBounds(sprite);
if(!rect.width || !rect.height)
{
return rect;
}
matrix = new Matrix();
matrix.tx = -Math.floor(rect.x);
matrix.ty = -Math.floor(rect.y);
var resW:int = Math.ceil(rect.width);
var rewH:int = Math.ceil(rect.height);
bmd = new BitmapData(resW, rewH, true, 0x0);
bmd.draw(sprite, matrix);
resRect = bmd.getColorBoundsRect(0xFF000000, 0xFF000000);
return rect;
}
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.