Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   не понятно ведет себя высота контейнера после addchild (http://www.flasher.ru/forum/showthread.php?t=208129)

loverzam 05.06.2014 17:27

не понятно ведет себя высота контейнера после addchild
 
добавил swc в проект, содержащую компоненты флеша(кнопки, списки и т.д).
в коде добавляю кнопку

var btn:Button = new Button();
btn.label = "123123";
this.actionPanel.addChild(btn);

делаю trace размера actionPanel.height до вызова addChild - высота 52.
а сразу после - 101.

При этом высота кнопки 22(тоже трейсом выводил). Пробовал задать btn.height = 10(к примеру) - но ничего не меняется.

При этом если вместо Button() - использовать обычный textField то происходит то же самое. Но если созданному textField задать выосту *.height - то тогда высота контейнера высталвяется правильная после вызова addchild.

В чем тут дело? компонент кнопки особенный какой-то? ему надо больше месте? :)

caseyryan 05.06.2014 17:54

Ничего особенного. Просто размер текстфилда по умолчанию 100х100, а в кнопке он есть. Поэтому геттер высоты кнопки возвращает высоту ее графики, а контейнер учитывает и высоту текстфилда

loverzam 05.06.2014 18:01

Не совсем понял.
допустим gettern высоты textfield считает ее реальную высоту целиком. а settern соответственно устаналивает реальную высоту.

получается для button геттерны и сеттерны работают только с графикой, а реальный размер не отображают и не ставят соответственно? если так то как мне изменить размер кнопки реальный, а не только ее графики? ведь когда я создаю кнопку new Button() я не создаю отдельно контейнер в котором она нарисована? как к нему обратиться для изменения его размеров?

MikroAcse 05.06.2014 19:44

Чтобы узнать реальный размер, нужно использовать getBounds.

caseyryan 05.06.2014 20:22

Не стоит надеяться на правильную работу измерителя высоты во флеше. Если нужны точные показатели, создайте свой контейнер и переопределите геттеры высоты и ширины.
Пример:
Код AS3:

package  {
 
        import flash.display.Sprite;
 
        public class TestClass extends Sprite {
 
                private var _sprite:        Sprite        = new Sprite();
 
                public function TestClass() {
                        _sprite.graphics.beginFill(0x80FF00);
                        _sprite.graphics.drawRect(0, 0, 200, 200);
                        _sprite.graphics.endFill();
                        _sprite.x = _sprite.y = 100;
                        addChild(_sprite);
                }
                override public function get width():Number {
                        return 100;
                }
                override public function get height():Number {
                        return 60;
                }
        }
}

В этом случае высота и ширина контейнера (документ класса), будет не 300х300, а 100х60

loverzam 05.06.2014 21:08

Цитата:

Сообщение от caseyryan (Сообщение 1167420)
Не стоит надеяться на правильную работу измерителя высоты во флеше. Если нужны точные показатели, создайте свой контейнер и переопределите геттеры высоты и ширины.

в вашем приеме вы явно задаете размеры.
у меня же sprite - actionPanel будет содержать разные компоненты и его размеры будут меняться.
как мне получать актуальную информацию и не задавать ее статично?

Добавлено через 1 минуту
Цитата:

Сообщение от MikroAcse (Сообщение 1167415)
Чтобы узнать реальный размер, нужно использовать getBounds.


getBounds возвращает мне rectangle где высота точно также выдает 101, как и *.height

Добавлено через 4 минуты
Цитата:

Сообщение от caseyryan (Сообщение 1167420)
Не стоит надеяться на правильную работу измерителя высоты во флеше.

хм. вообще никогда? :) зачем они тогда реализовали эти гетерны и сетерны?
и потом , получается единственным "точным" способом посчитать реальную (отображаемую) высоту спрайта-контейнера - это пройтись по его детям, найти того у которого "y" самая большая и добавить к нему высоту этого же ребенка?

а если там глубина вложенности детей 10, 100, 1000? обходить всех на всех уровнях?

caseyryan 05.06.2014 21:22

Цитата:

эти гетерны и сетерны?
кхм.. геттеры и сеттеры

У вас какая-то проблема притянутая за уши, если честно. Все равно у вас же есть какие-то определенные размеры, в которые должна умещаться ваша панель действий. Поэтому либо ориентируйтесь на эти размеры, либо не используйте флешевские корявые компоненты, а берите либо сторонние, либо делайте собственные, которые будут все правильно возвращать.
Цитата:

зачем они тогда реализовали эти гетерны и сетерны?
Они возвращают реальную высоту и ширину контейнера, с учетом параметров всех его детей. А их высота и ширина не всегда равны их видимой части. Но как это обойти я уже описал выше

loverzam 05.06.2014 21:23

Нашел решение - которое предполагал :)
http://stackoverflow.com/questions/1...iner-correctly

Добавлено через 2 минуты
Цитата:

Поэтому либо ориентируйтесь на эти размеры, либо не используйте флешевские корявые компоненты, а берите либо сторонние, либо делайте собственные, которые будут все правильно возвращать.
собственно так и рекомендуют - не пользоваться этими компонентами. Действительно таких проблем не знал пока свои делал :D а тут думаю, дай сэкономлю время используя дефолт. И потерял целый день с этими параметрами высоты :D

caseyryan 05.06.2014 21:42

Стандартные компоненты подходят лишь когда надо по-быстренькому что-то набросать, не обращая внимания на дизайн. Лишь бы работало. Но когда надо делать серьезные проект, эти компоненты никак не подойдут

п.с. Речь не о флексовых компонентах (а то наверняка сейчас найдутся те, кто начнет спорить и приводить их в пример :D)

GBee 06.06.2014 02:54

Цитата:

п.с. Речь не о флексовых компонентах (а то наверняка сейчас найдутся те, кто начнет спорить и приводить их в пример )
Я бы про часть флексовых так же сказал.


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

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