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

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

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
По умолчанию как отправить свой resize при ресайзе/перемещении детей?

есть следующий класс:
Код AS3:
package {
import flash.display.MovieClip;
import flash.events.MouseEvent;
import MyEvent;
// Par - класс прописан в линкейдж символу в библиотеке, екземпляр на стейдже
public class Par extends MovieClip{	
	private var ch1:MovieClip;
	private var ch2:MovieClip;
 
	public function Par(){
		ch1 = getChildByName("c1") as MovieClip;
		ch2 = getChildByName("c2") as MovieClip;
		ch1.addEventListener(MouseEvent.MOUSE_DOWN, me);
		ch1.addEventListener(MouseEvent.MOUSE_UP  , me);
		ch2.addEventListener(MouseEvent.MOUSE_DOWN, me);
		ch2.addEventListener(MouseEvent.MOUSE_UP  , me);
		addEventListener(MyEvent.RESIZE, res);
	}	
	private function res(e:MyEvent):void{ trace("resize !");}	
	private function me(e:MouseEvent):void{
		switch(e.type){
			case MouseEvent.MOUSE_DOWN:
				e.currentTarget.startDrag();
			break;
			case MouseEvent.MOUSE_UP:
				e.currentTarget.stopDrag();
				// видим что width и height меняются
				trace(height+" : "+width); 
			break;
	}	}
	override public function set width(value:Number):void{
		// а это не срабатывает - меняются без сетера???
		// ...естественно при явном изменении width и height в коде все ок
		dispatchEvent(new MyEvent(MyEvent.RESIZE));
		super.width = value;			
	}
	override public function set height(value:Number):void{
		dispatchEvent(new MyEvent(MyEvent.RESIZE)); 
		super.height = value;
	}
}}
ну с MyEvent все просто:
Код AS3:
package {
import flash.events.Event;
public class MyEvent extends Event{
	public static const RESIZE:String = "clipResize";
	public function MyEvent(t:String){
		super(t);
       	} 
       	public override function toString():String { 
       		return formatToString("MyEvent");
       	}
}}
почему событие не диспатчится при перемещении чайлдов?
или в DisplayObjectContainer`e умудрились реализовать пересчет width и height при
трансформе чайлдов тупо на приват свойствах без аккессоров?
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 30.03.2010 в 17:20.
Старый 30.03.2010, 19:03
iflamberg вне форума Посмотреть профиль Отправить личное сообщение для iflamberg Найти все сообщения от iflamberg
  № 2  
Ответить с цитированием
iflamberg
 
Аватар для iflamberg

Регистрация: Jan 2009
Сообщений: 1,651
естественно при перемещнии мувиков ширина и высота будут меняться без вызова сеттеров. Поэтому видимо, событие надо вешать на MOUSE_UP.
Вообще странная логика у вас в приложении. Объект сам создает события, сам же их и ловит... Или это для тестов?
__________________
мой пустой блог

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
да, это для тестов
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Поэтому видимо, событие надо вешать на MOUSE_UP.
если бы все было так просто, я бы и не спрашивал.
дело как раз в том, что объекты могут перемещаться, ресайзиться, поворачиваться
как в хендлерах мыши/клавы/таймера и тд, так и внутренним функционалом самих чайлдов
так же чайлды могут изменять друг друга.
и при всех этих действах надо чтобы отправлялось событие ресайза контейнера
причем если допустим чайлд тащится мышей, то оно должно отправляться как будто диспатчится из MOUSE_MOVE хендлера
а не только при дропе
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 30.03.2010 в 20:26.
Старый 30.03.2010, 20:21
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 4  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>почему событие не диспатчится при перемещении чайлдов?

а разве должно?
x/y ,имхо, для этого надо переписывать

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

Регистрация: Jan 2009
Сообщений: 1,651
на каждое такое действие придется создавать событие.
Ну или забить на событийную систему и повесить хендлер на ENTER_FRAME, который будет проверять не изменились ли width, height.
Ну или совсем жесткий способ: Переписать width, height для MovieClip.prototype, но не уверен, поможет ли.
__________________
мой пустой блог

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Ну или забить на событийную систему и повесить хендлер на ENTER_FRAME
надоело, как и таймер - часто тикают себе в холостую,
а когда че нибудь ресурсоемкое начинает считаться они совсем не в жилу становятся
Цитата:
Сообщение от iflamberg Посмотреть сообщение
Ну или совсем жесткий способ: Переписать width, height для MovieClip.prototype
результат будет тот же что и при простом оверрайде аккессора,
а приватные _width _height смысла нет трогать - они тупо переменные
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 30.03.2010 в 21:06.
Старый 30.03.2010, 21:12
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 7  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
как в хендлерах мыши/клавы/таймера и тд, так и внутренним функционалом самих чайлдов
так же чайлды могут изменять друг друга.
Вот и косяк
Пусть чайлды диспатчат события, а парент решает что с этим делать и масштабирует/двигает/поворачивает детей.
При таком подходе не будет сложностей
__________________
...вселенская грусть

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Пусть чайлды диспатчат события, а парент решает что с этим делать
чайлды - динамически подгружаемые сторонние swf написаные не мной - черный ящик
причем среди авторов попадаются товарищи которые юзают нечто типа if(parent.contains(myOtherClip)){...
поэтому заварачивать их в контейнеры, которые умеют диспатчить событие тоже не вариант
поэтому это не косяк а необходимость
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов


Последний раз редактировалось Elser; 30.03.2010 в 21:36.
Старый 30.03.2010, 21:55
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 9  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Мне кажется, что есть необходимость договариваться "как будем делать?" с коллегами...
Не поймите меня неправильно, но косяк есть - причем в архитектуре. Дети, в большинстве случаев, вообще не должны знать о других детях своего ранга.

ЗЫ
Цитата:
подгружаемые сторонние swf
А как Вы их на сцену добавляете? Внутри лоадера? - тогда как может существовать if(this.parent.contains(blah-blah-blah)) ?
__________________
...вселенская грусть

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

Регистрация: Feb 2009
Адрес: Ялта, Севастополь, Одесса
Сообщений: 52
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Мне кажется, что есть необходимость договариваться "как будем делать?" с коллегами...
это со всеми флеш разработчиками чтоли?
есть ТЗ - должны работать любые swf которые работают на веб-страницах
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
тогда как может существовать if(this.parent.contains(blah-blah-blah)) ?
а вот тут Вы правы - че то я ступил - их парент чайлд моего мувика а не сам мувик, спасибо
тоесть вариант с контейнерами катит но тогда вопрос - как отправить событие когда чайлд ресайзится изза самотрансформации этих загруженых клипов (не юзая enterframe и timer)
__________________
понимание основ освобождает от необходимости запоминания тысяч фактов

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

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

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


 


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


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