Показать сообщение отдельно
Старый 25.08.2009, 15:27
ToRR вне форума Посмотреть профиль Отправить личное сообщение для ToRR Найти все сообщения от ToRR
  № 6  
Ответить с цитированием
ToRR

Регистрация: Feb 2007
Сообщений: 63
В принципе, никто не мешает унаследоваться от того же Sprite'а, в классе реализовать все эти танцы с MOUSE_DOWN (подписаться в конструкторе), проверками на перетаскивание и т.д.
Наверх диспатчить кастомные(или стандартные MouseEvent.CLICK и т.д.) события, и наследовать все свои классы, требущие этот функционал от вышеописанного. Только в этом классе надо будет реализовать метод, который будет отписывать объекты от внутренних слушателей, чтобы GC смог потом все удалить.
Как-то так:
Код AS3:
public class MySprite extends Sprite 
{
	private var wasDragged:Boolean;
 
    public function MySprite()
    {
    	addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    }
 
    public function free():void
    {
    	removeEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
    	removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    	stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
    }
 
    private function onMouseDown(event:MouseEvent):void
    {
    	addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    	stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
    }
 
    private function onMouseMove(event:MouseEvent):void
    {
    	wasDragged = true;
    }
 
    private function onMouseUp(event:MouseEvent):void
    {
    	removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    	stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
    	if (!wasDragged)
    	{
			dispatchEvent(new MouseEvent(MouseEvent.CLICK....));    		
    	}
    }
}