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

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

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
По умолчанию Как лучше организовать взаимодействие между несвязанными объектами?

Например у меня есть несколько графических объектов, вокруг которых рисуется квадратная рамка. И есть класс пользовательских настроек, в котором есть CheckBox со значением true - рисовать рамки, false - нет. В отдельном окошке можно переключать чек-бокс. Как организовать передачу данных при изменении пользователем состояния чек-бокса? Т.е. - снял чек-бокс - спрятались рамки. В голову приходит навесить на каждый объект слушатель события и генерировать это событие при изменении пользователем настроек. Но тогда в приложении будут постоянно висеть десятка два слушателей по сути ничем не занятых и использоваться они будут очень редко. Вроде выходит не рационально. А как можно сделать еще?

Старый 22.08.2011, 17:51
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 2  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Сделайте контроллер изображений (ImageController). Подпишите его на одно событие от объекта, который изменяет состояние чекбокса. Затем этот контроллер скажет всем графическим объектам:
Код AS3:
obj.frame = Model.frame;

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

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от toFL Посмотреть сообщение
Сделайте контроллер изображений (ImageController). Подпишите его на одно событие от объекта, который изменяет состояние чекбокса. Затем этот контроллер скажет всем графическим объектам:
Код AS3:
obj.frame = Model.frame;
Что такое контроллер изображений? Контейнер в который поместить их все и подписать его один на событие? У меня итак они все в контейнере, но дело в том, что не все изображения в контейнере имеют рамки и в этом случае придется тоже делать какое-то выборочное обращение только к нужным объектам.

Старый 22.08.2011, 18:10
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 4  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Цитата:
Что такое контроллер изображений?
Что-то типа того:
Код AS3:
package {
	public class ImageController {
		private var model:EventDispatcher;
		private var list:Array;
 
		public function ImageController(model:EventDispatcher, list:Array) {
			model.addEventListener(Event.CHANGE, onChange);
			this.list = list;
		}
		private function onChange (event:Event):void {
			for (var i:uint = 0; i < list.length; i++) {
				(list[i] as GraphObject).frame = model.frame;
			}
		}
	}
}
Цитата:
но дело в том, что не все изображения в контейнере имеют рамки и в этом случае придется тоже делать какое-то выборочное обращение только к нужным объектам.
В этом случае сам объект уже решает, есть у него рамка или нет. Обращайтесь ко всем.


Последний раз редактировалось toFL; 22.08.2011 в 18:13.
Старый 22.08.2011, 22:07
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 5  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от toFL Посмотреть сообщение
Что-то типа того:
Контейнер. Понятно. Нечто подобное у меня и есть под названием "сцена". Ну, раз других идей нет, сделаю так.

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
но дело в том, что не все изображения в контейнере имеют рамки и в этом случае придется тоже делать какое-то выборочное обращение только к нужным объектам.
Для таких дел есть интерфейсы (is). Или obj.hasOwnProperty("frame"). Но интерфейсы волшебнее.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.08.2011, 11:59
Korchy вне форума Посмотреть профиль Отправить личное сообщение для Korchy Найти все сообщения от Korchy
  № 7  
Ответить с цитированием
Korchy
 
Аватар для Korchy

Регистрация: May 2011
Сообщений: 301
Записей в блоге: 2
Цитата:
Сообщение от GBee Посмотреть сообщение
Для таких дел есть интерфейсы (is). Или obj.hasOwnProperty("frame"). Но интерфейсы волшебнее.
Использование приведения типов - зло. Тогда уж, как писал toFL, нужно использовать полиформизм.

Старый 23.08.2011, 12:10
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 8  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Цитата:
Использование приведения типов - зло.
1) А где приведение типов?
2) Почему зло?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 23.08.2011, 12:20
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 9  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Говоря о примере toFL - зачем конроллеру обновлять отображения? для этого есть события:
Код AS3:
 
model.dispatchEvent(new Event(Event.CHANGE));
 
...
 
// где-то в объекте отображения
model.addEventListener(Event.CHANGE, onModelChange);
Для удобства можно сделать модель статическим объектом. Отображения должны обновляться при добавлении на сцену (Event.ADDED_TO_STAGE) и в момент добавления начинать слушать события модели. Как только отображение удаляется со сцены (Event.REMVED_FROM_STAGE), оно должно прекращать слушать модель.
... и никаких циклов, никаких массивов
__________________
...вселенская грусть

Старый 23.08.2011, 12:32
toFL вне форума Посмотреть профиль Найти все сообщения от toFL
  № 10  
Ответить с цитированием
toFL
Banned

Регистрация: May 2011
Адрес: +48° 27' 57.93", +35° 2' 46.02"
Сообщений: 447
Записей в блоге: 2
Отправить сообщение для toFL с помощью Skype™
Код AS3:
// где-то в объекте отображения
model.addEventListener(Event.CHANGE, onModelChange);
Ага, и затем Вам необходимо изменить model (например сделать другой или изменить параметры и т.п.) и "привет" изменения в классах самого нижнего уровня. Недавно был огромный холивар на эту тему (Статические параметры и т.п.).
Поэтому:
Цитата:
... и никаких циклов, никаких массивов
сомнительный аргумент.

Добавлено через 11 минут
Цитата:
Контейнер. Понятно
Контейнер - хранит в себе дочерние объекты.
Контроллер - УПРАВЛЯЕТ однотипными объектами
Это разные вещи.


Последний раз редактировалось toFL; 23.08.2011 в 12:44.
Создать новую тему Ответ Часовой пояс GMT +4, время: 20:24.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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