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

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

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

Регистрация: Sep 2012
Сообщений: 26
По умолчанию UI/ Контейнеры

Какие контейнеры лучше использовать в приложении с простым GUI? Хочу на их базе сверстать Header, Content, Footer. Что бы можно было менять их свойства типа BackgroudColor, BorderColor и чтобы контролы внутри них имели относительные контейнера размеры. Например, изменил размер хедера -> изменилось расположение кнопки.
начал писать свой класс, но может есть что-то готовое уже? да и не уверен я за свой контейнер..
Код AS3:
public class Container extends Sprite
	{
		public function Container(w:Number=0,h:Number=0) {
			_width = w;
			_height = h;
		}
 
		protected:
			var _background:Sprite = new Sprite();;
			var _border:Sprite = new Sprite();
 
			var _height:Number = 0;
			var _width:Number = 0;
 
			var _borderThickness:Number = 1;
			var _borderColor:uint = 0x000000;
 
			var _backgroundColor:uint = 0xFFFFFF;	
 
 
		public function set Height(height:Number) {
			_height = height;
			Init();
		}
		public function set Width(width:Number) {
			_width = width;
			Init();
		}	
		public function get Height():Number {
			return _height;
		}
		public function get Width():Number {
			return _width;
		}
 
		public function set BorderThickness(thickness:Number) {
			_borderThickness = thickness;
			Init();
		}
 
		public function set BorderColor(color:uint) {
			_borderColor = color;
			Init();
		}
		public function set BackgroundColor(color:uint) {
			_backgroundColor = color;
			Init();
		}
 
		public function  Init() 
		{
			_background.graphics.clear();
			_background.graphics.beginFill(_backgroundColor);
			_background.graphics.drawRect(0, 0, _width, _height);
			addChild(_background);
 
			_border.graphics.clear();
			_border.graphics.lineStyle(_borderThickness, _borderColor);
			_border.graphics.drawRect(0, 0, _width, _height);
			addChild(_border);
		}
хедер

Код AS1/AS2:
public class HeaderMenu extends Container 
	{
		var  btnLoad:Button = new Button();
 
		public function HeaderMenu(w:Number, h:Number) {
			super(w,h);
			_backgroundColor = 0xE13737;
			btnLoad.label = 'Загрузить SWF';
			Init();
 
 
		}
 
		public override function Init()
		{
			super.Init();
			btnLoad.x = 10;
			btnLoad.y = Height / 2 - btnLoad.height / 2;
			addChild(btnLoad);
		}
 
	}
Добавлено через 11 минут
Да и в таком случае, если я меняю цвет фона контейнера (через свойство базового класса), помимо перерисовки фона и рамки ещё заново перерасчитаются координаты кнопки. а это уже лишнее. Контролы должны перестраиваться только при изменении размера контейнера.

Добавлено через 1 час 1 минуту
можно разбить Init() на две функции. одна будет перерисовывать фон и рамку и вызываться при изменение любого свойства , а вторая виртуальная будет перестраивать контролы и вызываться только при изменении Height, Width. Работать будет, но может плюнуть и воспользоваться каким-нибудь готовым решением?


Последний раз редактировалось Unkeep; 19.06.2013 в 14:15.
Старый 19.06.2013, 18:11
strangedk вне форума Посмотреть профиль Отправить личное сообщение для strangedk Найти все сообщения от strangedk
  № 2  
Ответить с цитированием
strangedk
 
Аватар для strangedk

Регистрация: Oct 2010
Адрес: Харьков
Сообщений: 616
Записей в блоге: 1
Отправить сообщение для strangedk с помощью ICQ Отправить сообщение для strangedk с помощью Skype™
Нужно реализовать что-то типа commitProperties и invalidate, как во Flex

Т.е. обновлять только те свойства, которые менялись. Это разумеется добавляет больше кода, но стоит того, если ради оптимизации.
__________________
adobe AS3 manual

Старый 19.06.2013, 18:59
Котяра вне форума Посмотреть профиль Отправить личное сообщение для Котяра Посетить домашнюю страницу Котяра Найти все сообщения от Котяра
  № 3  
Ответить с цитированием
Котяра
буду краток
 
Аватар для Котяра

модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
Отправить сообщение для Котяра с помощью ICQ Отправить сообщение для Котяра с помощью Skype™
посмотри на
http://sibirjak.com/osflash/projects...ns-ui/layouts/
http://www.as3commons.org/as3-commons-ui/index.html
__________________
Отряд Котовскага

Старый 20.06.2013, 17:29
expl вне форума Посмотреть профиль Отправить личное сообщение для expl Найти все сообщения от expl
  № 4  
Ответить с цитированием
expl

блогер
Регистрация: Feb 2006
Сообщений: 1,474
Записей в блоге: 3
Цитата:
Т.е. обновлять только те свойства, которые менялись. Это разумеется добавляет больше кода, но стоит того, если ради оптимизации.
Это если Вы приложение делаете и у вас нет дизайнера.
А если это игра - то забудьте про валидацию, не создавайте себе проблем, лучше вручную вызовите свойство UpdateSize() после добавления детей или если какой-то компонент должен занять больше/меньше пространства. Тупо меньше багов будет и времени меньше убъёте. Валидация будет мешеать воплощать то, что нарисовал диз.

И с первого раза без опыта систему валидации нормальную не сделать.
Самая нормальная валидация реализована во Flex, но и там оно бажит и требует очень хорошо себя знать при написании компонентов.
А то что сделано в AsWing - это вообще тихий ужас - оно никогда нормально не обновляло размеры. Так что либо Flex - либо ручками.

Старый 20.06.2013, 19:58
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 5  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
flex, там уже все написано

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

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

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


 


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


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