Моя подростковая фигура неправильно сообщает свой размер - PullRequest
2 голосов
/ 16 августа 2011

Если я образую анимацию движения между двумя прямоугольниками, например, так:

enter image description here

В кадре 5 у меня есть следующее:

trace(width);
trace(height);
trace(getRect(this));
trace(getBounds(this));

Я вернусь

49
49
(x=45, y=21, w=48, h=48)
(x=44.5, y=20.5, w=49, h=49)

Все неправильно !Они были бы правильными для кадра 1, но прямоугольник намного шире, чем этот для кадра 5. Похоже, что анимация формы сбивает с толку результаты.

Как получить фактический прямоугольник кадра 5 без добавления ключевых кадров по всемуграфик?

Ответы [ 2 ]

1 голос
/ 17 августа 2011

Я сделал сообщение о том, как получить границы отображаемого объекта, даже с прозрачными областями, здесь, в моем блоге. Это объясняет код ниже. http://plasticsturgeon.com/2010/09/as3-get-visible-bounds-of-transparent-display-object/

package util
{
   import flash.display.DisplayObject;
   import flash.display.BitmapData;
   import flash.geom.Rectangle;
   import flash.geom.Matrix;
   public function getVisibleBounds(source:DisplayObject):Rectangle
   {
       // Updated 11-18-2010;
       // Thanks to Mark in the comments for this addition;
       var matrix:Matrix = new Matrix()
       matrix.tx = -source.getBounds(null).x;
       matrix.ty = -source.getBounds(null).y;

       var data:BitmapData = new BitmapData(source.width, source.height, true, 0x00000000);
       data.draw(source, matrix);
       var bounds : Rectangle = data.getColorBoundsRect(0xFFFFFFFF, 0x000000, false);
       data.dispose();
       return bounds;
   }
}

Если вы подадите в экранный Объект, содержащий вашу анимацию формы, вы получите точные координаты и высоту, а также границы углов.

0 голосов
/ 16 августа 2011

Попробуйте умножить на шкалу, чтобы получить реальную ширину и высоту:

var realWidth:Number = scaleX * width;
var realHeight:Number = scaleY * height;

Редактировать:

Как насчет расчета размеров самостоятельно?

// Values roughly based on your screenshot, but you might need to adjust them
var startWidth = 10;
var endWidth = 100;
var startFrame = 5;
var endFrame = 10;
var currentWidth = startWidth + ((startFrame - currentFrame) / endFrame) * (endWidth - startWidth);
// Then the same for currentHeight
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...