Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 05.06.2014, 17:27
loverzam вне форума Посмотреть профиль Отправить личное сообщение для loverzam Найти все сообщения от loverzam
  № 1  
Ответить с цитированием
loverzam

Регистрация: Dec 2012
Сообщений: 6
По умолчанию не понятно ведет себя высота контейнера после 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.

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

Старый 05.06.2014, 17:54
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Ничего особенного. Просто размер текстфилда по умолчанию 100х100, а в кнопке он есть. Поэтому геттер высоты кнопки возвращает высоту ее графики, а контейнер учитывает и высоту текстфилда
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.06.2014, 18:01
loverzam вне форума Посмотреть профиль Отправить личное сообщение для loverzam Найти все сообщения от loverzam
  № 3  
Ответить с цитированием
loverzam

Регистрация: Dec 2012
Сообщений: 6
Не совсем понял.
допустим gettern высоты textfield считает ее реальную высоту целиком. а settern соответственно устаналивает реальную высоту.

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

Старый 05.06.2014, 19:44
MikroAcse вне форума Посмотреть профиль Отправить личное сообщение для MikroAcse Найти все сообщения от MikroAcse
  № 4  
Ответить с цитированием
MikroAcse
 
Аватар для MikroAcse

Регистрация: Feb 2012
Сообщений: 1,540
Чтобы узнать реальный размер, нужно использовать getBounds.

Старый 05.06.2014, 20:22
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 5  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Не стоит надеяться на правильную работу измерителя высоты во флеше. Если нужны точные показатели, создайте свой контейнер и переопределите геттеры высоты и ширины.
Пример:
Код 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
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.06.2014, 21:08
loverzam вне форума Посмотреть профиль Отправить личное сообщение для loverzam Найти все сообщения от loverzam
  № 6  
Ответить с цитированием
loverzam

Регистрация: Dec 2012
Сообщений: 6
Цитата:
Сообщение от caseyryan Посмотреть сообщение
Не стоит надеяться на правильную работу измерителя высоты во флеше. Если нужны точные показатели, создайте свой контейнер и переопределите геттеры высоты и ширины.
в вашем приеме вы явно задаете размеры.
у меня же sprite - actionPanel будет содержать разные компоненты и его размеры будут меняться.
как мне получать актуальную информацию и не задавать ее статично?

Добавлено через 1 минуту
Цитата:
Сообщение от MikroAcse Посмотреть сообщение
Чтобы узнать реальный размер, нужно использовать getBounds.

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

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

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

Старый 05.06.2014, 21:22
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 7  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
эти гетерны и сетерны?
кхм.. геттеры и сеттеры

У вас какая-то проблема притянутая за уши, если честно. Все равно у вас же есть какие-то определенные размеры, в которые должна умещаться ваша панель действий. Поэтому либо ориентируйтесь на эти размеры, либо не используйте флешевские корявые компоненты, а берите либо сторонние, либо делайте собственные, которые будут все правильно возвращать.
Цитата:
зачем они тогда реализовали эти гетерны и сетерны?
Они возвращают реальную высоту и ширину контейнера, с учетом параметров всех его детей. А их высота и ширина не всегда равны их видимой части. Но как это обойти я уже описал выше
__________________
Ко мне можно и нужно обращаться на ты)

Старый 05.06.2014, 21:23
loverzam вне форума Посмотреть профиль Отправить личное сообщение для loverzam Найти все сообщения от loverzam
  № 8  
Ответить с цитированием
loverzam

Регистрация: Dec 2012
Сообщений: 6
Нашел решение - которое предполагал
http://stackoverflow.com/questions/1...iner-correctly

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

Старый 05.06.2014, 21:42
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 9  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Стандартные компоненты подходят лишь когда надо по-быстренькому что-то набросать, не обращая внимания на дизайн. Лишь бы работало. Но когда надо делать серьезные проект, эти компоненты никак не подойдут

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

Старый 06.06.2014, 02:54
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 10  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
п.с. Речь не о флексовых компонентах (а то наверняка сейчас найдутся те, кто начнет спорить и приводить их в пример )
Я бы про часть флексовых так же сказал.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:32.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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