Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   getBounds() присылает мне не верную геометрию фигуры (http://www.flasher.ru/forum/showthread.php?t=186821)

razerw 08.11.2012 17:53

getBounds() присылает мне не верную геометрию фигуры
 
доброго времени суток.
функция getBounds() присылает мне не верную геометрию фигуры. то есть что я делаю.

есть вот такая функция присылающая геометрию фигуры
Код AS3:

                //Метод определяющий геометрию геометрию тайдла.
                private function getFrameSize(childByName:DisplayObject):Rectangle
                {
                        var min:Point = new Point();
                        var max:Point = new Point();
                        var bounds:Rectangle;
                        //allChildGotoFrame(mc, i);
                        bounds = childByName.getBounds(childByName);
                        min.x = Math.min(bounds.topLeft.x, min.x);
                        min.y = Math.min(bounds.topLeft.y, min.y);
                        max.x = Math.max(bounds.bottomRight.x, max.x);
                        max.y = Math.max(bounds.bottomRight.y, max.y);
                        //trace(max.x - min.x);
                        trace(min.x, min.y, max.x - min.x, max.y - min.y);
                        return new Rectangle(min.x, min.y, max.x - min.x, max.y - min.y);
                }

вот в этот аргумент childByName:DisplayObject поступает квадрат ширина = 10 длинна = 10, выравнена фигура по центру.
А вот что возвращает мне данная функция (x=-5.05, y=-5.05, w=26, h=21) как такое может происходить если стороны равны 10 пикселям?
может быть я неправильно пытаюсь узнать длину сторон?

Nooob 09.11.2012 04:12

значит в фигуре есть обводка толщиной 0.10. ну и ещё какой-то мусор

Sylon 09.11.2012 06:35

Такой результат может получаться и при отсутствии мусора.

К сожалению, getBounds работает весьма ненадёжно. Подробно вылавливать условия, при которых возникают лажевые результаты, руки не доходили, но как минимум при следующих условиях getBounds может давать кривые значения:

1. Контур с JointStyle.MITER или .BEVEL в сочетании с LineScaleMode, любым кроме NONE (впрочем, при этом и на экране выглядит зачастую весьма коряво, особенно при большой ширине контура; однако баги отображения и значений getBounds не коррелированы)

2. Использование scrollRect - как в самом объекте, так и в потомках.

3. Наличие TextField-ов с использованием системных шрифтов. Зависит от используемого шрифта. Глюки часто были на WinXP, на Win7 с плеерами от 10-го вроде-бы не повторялось

4. При перегрузке проца, когда подряд вызывается много обработчиков (например от MOUSE_MOVE и таймеров), и комп не успевает всё перерисовывать... объект, для которого берётся getBounds при этом может никак не меняться, включая всех родителей и потомков. Однако значения размеров/положения могут получаться "весьма интересные" - каждый раз разные при нескольких вызовах getBounds.

5. При наличии преобразований (масштабирование, поворот и т.п.) ошибки в пределах 0.05 - нормальное явление, ибо с таким разрешением производятся вычисления.

razerw 09.11.2012 09:34

Большое спасибо за внимание как оказалось на деле.
Действительно был мусор в виде добавление +10 пикселов в кеше ко всей анимации(.
Цитата:

Sylon
Да действительно есть такие погрешности виде сотых. Исправляю это математической функцией int ;)


Часовой пояс GMT +4, время: 12:58.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.