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

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

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

Регистрация: Mar 2009
Сообщений: 39
По умолчанию динамическое создание схемы.

Всем привет. Делаю курсач. Суть работы в том что бы можно было на схему набрасывать элементы и связывать их мужду собой (ну и потом проводить расчет, но это не важно). Так вот кто нибудь что нибудь такое делал? Возникают вопросы в обработке событий например при перетаскивание мыши может поворачиваться элемент, может передвигаться элемент, может перемещаться связь, или прикрепляться к элементу. Как построить обработку событий, чтобы не возникало конфликтов?

Добавлено через 2 часа 15 минут
Может какой нибудь класс, который следит за всеми событиями и определяет обработчика?

Старый 29.11.2009, 19:43
WRC_S вне форума Посмотреть профиль Отправить личное сообщение для WRC_S Посетить домашнюю страницу WRC_S Найти все сообщения от WRC_S
  № 2  
Ответить с цитированием
WRC_S
[+6 23.11.09]
 
Аватар для WRC_S

Регистрация: Jun 2009
Адрес: Россия
Сообщений: 318
Отправить сообщение для WRC_S с помощью ICQ
Сам пиши класс, это серьёзный курсак получается, видал такие коммерческие схемы, сам диплом дела на редактор графов и пришлось не мало попотеть, изучил много чего пока соорудил что надо. Курсак по какому предмету и что за схема (тиматика).

Старый 29.11.2009, 21:18
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 3  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Цитата:
Сообщение от dimani4 Посмотреть сообщение
Может какой нибудь класс, который следит за всеми событиями и определяет обработчика?
Одним классом тут не обойтись. Главное – хорошо продумать структуру, определить взаимосвязи. Выразить стутурные элементы в виде классов. Написать управляющий класс (или несколько управляющих классов разного уровня), которые будут заниматься логикой взаимодействия структурных элементов.

Старый 30.11.2009, 01:23
dimani4 вне форума Посмотреть профиль Отправить личное сообщение для dimani4 Найти все сообщения от dimani4
  № 4  
Ответить с цитированием
dimani4

Регистрация: Mar 2009
Сообщений: 39
У меня есть класс схема - большая плоскость на которую набрасываются др. элементы. Др.элемент может быть элементом узлом или связью. По поводу событий у меня две мысли: первая элементы выкидывают свои события, схема их слушает и решает что с этим событием делать.
Вторая: при нажатии мыши схема выставляет владельца, и если элемент не владелец(проверка внутри элемента), то он ничего не делает, а если владелец то делает то что ему надо, при отпускании мыши поле владелец чиститься.

Старый 30.11.2009, 01:25
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 5  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Первый вариант вполне рабочий.
А вот со вторым не понял. Что есть владелец?

Старый 30.11.2009, 01:25
dimani4 вне форума Посмотреть профиль Отправить личное сообщение для dimani4 Найти все сообщения от dimani4
  № 6  
Ответить с цитированием
dimani4

Регистрация: Mar 2009
Сообщений: 39
И как создать слушателя, который бы мог слышать события на всех объектах?

Добавлено через 7 минут
В схеме есть поле владелец события. По mouseDown в это поле пишу id элемента по mouseUp чищу поле. А все другие прежде чем что-то сделать спрашивают у схемы владельца и если владелец пуст или он сам владелец начинают работать.

Старый 30.11.2009, 02:04
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 7  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Ну, если активен должен быть только один элемент и только нажатый, то да. Только лучше, чтобы элементы не лезли в управляющий класс. Это он их содержит, а не они его. Поэтому лучше, если при активации определённого элемента схема будет вызывать у этого элемента определённый метод (или устанавливать свойство). Аналогично при деактивации.

Также, возможно, будет удобнее перенести обработку MOUSE_DOWN/MOUSE_UP и других событий ввода, касающихся конкретного элемента, в класс самого элемента, а не обрабатывать их в схеме. Это обеспечит бОльшую гибкость в случае разных типов элементов, так как элемент сам сможет решать, как ему реагировать на ввод. А уже после принятия решения, если нужно, сообщать о нём схеме (с помощью посылки соответствующего события).

Слушателя события нескольких объектов можно создать, либо подписав его на это событие для всех объектов по очереди, либо используя бабблинг (всплывание событий). Во втором случае нужно передавать в конструктор события второй аргумент, равный true. Всплывание работает только для наследников класса DisplayObject, добавленных в контейнер. Слушатель можно добавлять в любом из иерархии родительских контейнеров.


Последний раз редактировалось SamFR; 30.11.2009 в 03:08.
Старый 30.11.2009, 02:50
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 8  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Код AS3:
package {
 
	import flash.display.Sprite;
	import flash.events.Event;
 
	/**
	 * ...
	 * @author gloomyBrain
	 */
 
	public class Main extends Sprite {
 
		public var s0:Sprite;
		public var s1:Sprite;
		public var s2:Sprite
 
		public function Main():void {
 
			s0 = new Sprite();
			s1 = new Sprite();
			s2 = new Sprite();
			s0.addEventListener("someEvent", onEvent);
 
			addChild(s0);
			s0.addChild(s1);
			s1.addChild(s2);
			s2.dispatchEvent(new Event("someEvent", true));
 
		}
 
		public function onEvent(evt:Event):void {
			trace("got you!");
		}
 
	}
 
}
В данном примере слушатель регистрируется в объекте s0, а событие возникает объекте s2. Событие ловится, т.к. свойство события bubbles = true. Это заставляет событие проходить по всей иерархии отображения.
Таким образом, Вы можете диспатчить события любым объектом, а решения принимать в классе схемы (родительском объекте)

Собственно, пример к тому что написал Samfr

UPD:
Я бы делел так?
1 - класс ОбъектСхемы
2 - класс СвязьДвухОбъектов

1 - должен иметь поля:
- тип
- размер
- координаты
- связи (массив ссылок на объекты класса связьДвухОбъектов)
- ... что-то еще по заданию

1 - должен диспатчить события:
- при перемещении
- при удалении
- при изменении других свойств

1 - должен слушать свои события:
- перемещения (и вызывать метод перерисовать() для всех своих связей)
- удаления (и освобождать все вои связи от ссылки на себя)

2 - должен иметь поля:
- тип
- цвет
- координаты одного конца |=> для создания связей без привязки к объектам
- координаты второго конца|
- первый объект (ссылка на объект класса ОбъектСхемы)
- второй объект (ссылка на объект класса ОбъектСхемы)
- ... еще что-то по заданию

2 - должен иметь методы:
- перерисовать() - метод, рисующий связь заново при изменении положения ОбъектовСхемы, ссылки на которые записаны в первомОбъекте и второмОбъекте данной связи
- ... еще что-то по заданию
__________________
...вселенская грусть


Последний раз редактировалось gloomyBrain; 30.11.2009 в 03:17.
Старый 01.12.2009, 01:45
dimani4 вне форума Посмотреть профиль Отправить личное сообщение для dimani4 Найти все сообщения от dimani4
  № 9  
Ответить с цитированием
dimani4

Регистрация: Mar 2009
Сообщений: 39
спасибо народ стало проесняться в моей голове. и еще вопрос если у меня в коде присутствует обращение к parent значит стоит задуматься об объектной модели(о свойствах и методах). Может есть какой нибудь патерн проектирования под управление событиями?

Старый 01.12.2009, 03:53
SamFR вне форума Посмотреть профиль Отправить личное сообщение для SamFR Посетить домашнюю страницу SamFR Найти все сообщения от SamFR
  № 10  
Ответить с цитированием
SamFR

Регистрация: Mar 2008
Адрес: Ростов-на-Дону
Сообщений: 354
Лучший паттерн – лист бумаги и автоматический карандаш Есть такая хорошая штука – UML. Никто, конечно, не запрещает рисовать по-своему, но ознакомиться очень рекомендую.

Да, обращение к parent – нехорошо. Задуматься стоит. Составной элемент схемы ничего не должен о ней знать, на то он и составной элемент. Не говоря уже о том, что тип придётся приводить – свойство parent имеет тип DisplayObjectContainer, а вам же, наверное, что-то вроде Circuit нужно.

Почему бы, например, не высылать события? А родитель уже пускай на них реагирует соответствующим образом.

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

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

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


 


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


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