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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 08.06.2009, 22:26
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 11  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
Хорошая идея! Я не подумал, действительно удобнее было бы эмулировать в противоположную сторону.
Спасибо за совет.

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

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Событийная система ту вроде неплохо подходит.
Объекты, преставляющие элементы схемы (элемент ИЛИ на иллюстрации выше) подписываются входными "контактами" на "выходы" предыдущих.

1. Сначала все объекты на входах имеет состояние null или предопределенное.
2. Жмем кнопку! Кнопка диспатчит подписчикам свое состояние.
3. Срабатывает эффект домино. Все довольны.

Цитата:
Сообщение от alatar Посмотреть сообщение
Зачем циклически опрашивать? Есть четыре объекта (в данном случае): два входа, логический элемент, выход. Лампочка запрашивает сигнал с выхода, выход запрашивает логичекий элемент, логический элемент опрашивает свои входы, входы запрашивают состояние своих кнопок.Все
Я считаю, что MVC тут идеально вписывается.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 08.06.2009, 23:25
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 13  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
в простейшем виде то, что Дима описал:
Код AS3:
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();
		}
 
	}
 
}
Код AS3:
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;
		}
 
	}
}
Код AS3:
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;
		}
 
	}
}
Код AS3:
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);
		}
 
	}
}
понятно, что все затейливее:добавление входов на сеттерах, какие-то интерфейсы чтобы универсально добавлять разные типы и т.д., но это уже как бы детали, я так тут намусорил изрядно

Старый 08.06.2009, 23:57
Роман Вадимович вне форума Посмотреть профиль Отправить личное сообщение для Роман Вадимович Найти все сообщения от Роман Вадимович
  № 14  
Ответить с цитированием
Роман Вадимович

Регистрация: May 2007
Сообщений: 232
dimarik, я с Вами полностью согласен.
Спасибо, silin. Примите невероятные благодарности за реализованный код, он мне очень поможет в разработке.

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

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

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


 


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


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