PDA

Просмотр полной версии : [Alternativa] Диспетчирезация события MouseEvent3D.MOUSE_UP.


Fintch
30.05.2012, 14:20
Здравствуйте!

Возникла следующая проблема:
Я делаю перетаскивание изображения текстуры с панели на вьюпорт.
По плану, я должен определить, что изображение отпущено на вьюпорте и определить на каком объекте.

Изображению выставляю mouseEnable = false; и mouseChildren = false;
Затем подписываюсь stage.addEventListener(MouseEvent.MOUSE_UP, textureInViewHandler);
Проверяю if (e.target is View) то удаляю изображение и слушатель.
Также подписываюсь на scene.addEventListener(MouseEvent3D.MOUSE_UP, checkTextureInViewHandler);
И пока просто делаю trace(e.target);

Если перетаскиваем текстуру она благополучно удаляется, но на выходе ничего..
Если просто щелкаем по вьюпорту получаем [object3D null];

Почему событие не доходит до сцены?
Я пробовал еще лучами делать, но там есть ряд проблем с точностью пересечений..

Srednas
01.06.2012, 08:03
Попробуйте, как вариант, на 3д-объекте подписаться не на UP, а на MouseEvent3D.MOUSE_MOVE
что-то вроде:
scene.addEventListener(MouseEvent3D.MOUSE_MOVE, checkTextureInViewHandler);
Как только событие произойдет, снимите слушатель:
private function checkTextureInViewHandler(e:MouseEvent3D):void{
scene.removeEventListener(MouseEvent3D.MOUSE_MOVE, checkTextureInViewHandler);
trace(e.target);
}

Fintch
01.06.2012, 11:19
Спасибо за совет) Я уже разобрался. Сделал вот так:
private var _lastEtarget:Object3D = null;

scene.addEventListener(MouseEvent3D.MOUSE_MOVE, sceneMouseMoveHandler);
stage.addEventListener(MouseEvent.MOUSE_UP, stageMouseMoveHandler);

private function sceneMouseMoveHandler(e:MouseEvent3D):void {

_lastETarget = e.target as Object3D;

}

private function stageMouseMoveHandler(e:MouseEvent3D):void {

trace(_lastETarget);

}