|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
сообщить Родителю об изменении Ребенка
public class ParentClass { public var Child1:ChildClass1; public var Child2:ChildClass1; public var Child3:ChildClass1; } все дети взаимосвязанны, т.е. изменение одного должно приводить к изменениям всех остальных(этим должен заниматся предок) как узнать что в ребенке что-то изменилось и запустить цепочку обновлений всех остальных? кроме Event-ов есть варианты? классы - чистая математика, нагружать их наследованием от ивентДиспатчера как-то не хочется |
|
|||||
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); } } } } 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 |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Передавать ссылку на родителя детям. Пусть вызывают методы. Желательно через интерфейс.
Хотя это не сильно правильный подход. incvizitor, если я правильно понял код removeItem, то его до двух строк сократить не пробовали? Последний раз редактировалось etc; 21.10.2010 в 16:50. |
Часовой пояс GMT +4, время: 02:32. |
|
« Предыдущая тема | Следующая тема » |
|
|