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

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

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

Регистрация: Jul 2010
Адрес: 50° 27′ 0″ N, 30° 30′ 0″ E
Сообщений: 256
Записей в блоге: 2
По умолчанию сообщить Родителю об изменении Ребенка

Код AS3:
public class ParentClass 
	{
		public var Child1:ChildClass1;
		public var Child2:ChildClass1;
		public var Child3:ChildClass1;
 
	}
доступ к методам детей публичный, но для экономии, часть свойств детей дублируется в предке в виде геттеров-сеттеров

все дети взаимосвязанны, т.е. изменение одного должно приводить к изменениям всех остальных(этим должен заниматся предок)

как узнать что в ребенке что-то изменилось и запустить цепочку обновлений всех остальных?

кроме Event-ов есть варианты?

классы - чистая математика, нагружать их наследованием от ивентДиспатчера как-то не хочется

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Код AS3:
package vaukalak.managers 
{
	/**
	 * ...
	 * @author vaukalak
	 */
	public class SynchronizationGroup
	{
 
		private var _items:Vector.<SynchronizationItem> = Vector.<SynchronizationItem>([]);
 
		public function SynchronizationGroup() {
 
		}
 
		public function addItem(it:*, scale:Number = 1, off:Number = 0):SynchronizationItem {
			var item:SynchronizationItem = new SynchronizationItem(it, scale, off);
 
			_items.push(item);
 
			return item;
		}
 
		public function removeItem(it:*):void {
			var shifht:Boolean = false;
			var i:uint = 0;
			while (!shifht && (i < _items.length)) {
				if (_items[i].object == it) {
					shifht = true;
					_items[i] = null;
				}
				i++;
			}
			if (shifht) {
 
				for (i = i; i < _items.length; i++)
					_items[i - 1] = _items[i];
 
				_items.length--;
 
			}
		}
 
		public function clear():void {
			_items = Vector.<SynchronizationItem>([]);
		}
 
		public function updateItems(prop:String, val:Number):void {
			for (var i:uint = 0; i < _items.length; i++) {
				_items[i].setValue(prop, val);
			}
		}
 
	}
 
}
Код AS3:
package vaukalak.managers 
{
	/**
	 * ...
	 * @author vaukalak
	 */
	public class SynchronizationItem
	{
 
		internal var object:*;
 
		private var _propertyOffsets:Object={};
 
		public var scale:Number;
		public var offset:Number;
 
		public function SynchronizationItem(obj:*, sc:Number=1, off:Number=0) {
			object = obj;
			scale = sc;
			offset = off;
		}
 
		internal function setValue(prop:String, val:Number):void {
			object[prop] = (val + offset + (_propertyOffsets[prop] ? _propertyOffsets[prop] : 0)) * scale;
		}
 
		public function setPropertyOffset(prop:String, val:Number):void {
			_propertyOffsets[prop] = val;
		}
 
	}
 
}
Еще не дописал правда, но работает
Создаёте группу в неё пихаете все объекты что нужно. Можно указать scale и offset для каждого итема, а также для нейкого определённого его свойства. Что бы изменить свойства всех объектов, вызывайте метод updateItems класса SynchronizationGroup.
__________________
ranga

Старый 21.10.2010, 16:47
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 3  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Передавать ссылку на родителя детям. Пусть вызывают методы. Желательно через интерфейс.
Хотя это не сильно правильный подход.

incvizitor, если я правильно понял код removeItem, то его до двух строк сократить не пробовали?


Последний раз редактировалось etc; 21.10.2010 в 16:50.
Старый 21.10.2010, 17:17
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Можно просто родительскую функцию ребенку передать, типа callback. Изменился – вызвал.

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

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Код AS3:
public function removeItem(it:*):void {
	if(_items.indexOf(it) != -1)
	    _items.splice(_items.indexOf(it),1);
}
Просто иногда пишу по старинке, что бы, так сказать, самые основы не забывать))
__________________
ranga

Старый 21.10.2010, 23:10
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 6  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А чем эвентдиспетчер не устраивает? Все равно вы именно его придумываете.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

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

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


 


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


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