![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2007
Сообщений: 232
|
Хорошая идея! Я не подумал, действительно удобнее было бы эмулировать в противоположную сторону.
Спасибо за совет. |
|
|||||
|
.
|
Событийная система ту вроде неплохо подходит.
Объекты, преставляющие элементы схемы (элемент ИЛИ на иллюстрации выше) подписываются входными "контактами" на "выходы" предыдущих. 1. Сначала все объекты на входах имеет состояние null или предопределенное. 2. Жмем кнопку! Кнопка диспатчит подписчикам свое состояние. 3. Срабатывает эффект домино. Все довольны. Я считаю, что MVC тут идеально вписывается. |
|
|||||
|
в простейшем виде то, что Дима описал:
package { import fl.controls.CheckBox; import flash.display.Sprite; import flash.events.Event; public class Main extends Sprite { private var _sw1:LogicSorce = new LogicSorce(); private var _sw2:LogicSorce = new LogicSorce(); private var _gate:LogicGate = new LogicGate(_sw1,_sw2); private var _consumer:LogicConsumer = new LogicConsumer(_gate); public function Main():void { //чекбоксы-переключатели var cb1:CheckBox = new CheckBox(); var cb2:CheckBox = new CheckBox(); cb2.y = 30; cb1.addEventListener(Event.CHANGE, change1Handler); cb2.addEventListener(Event.CHANGE, change2Handler); addChild(cb1); addChild(cb2); } //переключаем источники, смотрим трейс на потребителе private function change1Handler(evnt:Event):void { _sw1.switchState(); } private function change2Handler(evnt:Event):void { _sw2.switchState(); } } } package { import flash.events.*; //перключатель public class LogicSorce extends EventDispatcher { private var _output:Boolean = false; public function LogicSorce() { } public function switchState():void { _output = !_output; dispatchEvent(new Event(Event.CHANGE)); } public function get output():Boolean { return _output; } } } package { import flash.events.*; //OR-блок public class LogicGate extends EventDispatcher { private var _output:Boolean = false; private var _input1:LogicSorce; private var _input2:LogicSorce; public function LogicGate(inp1:LogicSorce,inp2:LogicSorce) { _input1 = inp1; _input2 = inp2; _input1.addEventListener(Event.CHANGE, changeHandler); _input2.addEventListener(Event.CHANGE, changeHandler); } private function changeHandler(evnt:Event):void { dispatchEvent(new Event(Event.CHANGE)); } public function get output():Boolean { return _input1.output || _input2.output; } } } package { import flash.events.Event; //лампочка public class LogicConsumer { private var _input:LogicGate; public function LogicConsumer(inp:LogicGate) { _input = inp; _input.addEventListener(Event.CHANGE, changeHandler); } private function changeHandler(evnt:Event):void { trace("лампочка: " + _input.output); } } } |
|
|||||
|
Регистрация: May 2007
Сообщений: 232
|
dimarik, я с Вами полностью согласен.
Спасибо, silin. Примите невероятные благодарности за реализованный код, он мне очень поможет в разработке. |
![]() |
![]() |
Часовой пояс GMT +4, время: 17:41. |
|
|
« Предыдущая тема | Следующая тема » |
|
|