Хочется сделать возможность перетаскивания только в пределах спрайта s1, но не получается отключить мышь для спрайта в событии down, mouseEnabled срабатывает только после события up. Посмотрите пожалуйста, где я туплю?
Код AS3:
package
{
import flash.display.*;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Point;
public class Main extends Sprite
{
public function Main():void
{
super();
addEventListener(Event.ADDED_TO_STAGE, init);
}
private var s1:Sprite;
private var s2:Sprite;
private var shift:Point = new Point();
private function init(e:Event):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
s1 = new Sprite();
s1.graphics.beginFill(0x00FF00, 0.5);
s1.graphics.drawRect(0, 0, 300, 300);
s1.graphics.endFill();
s1.x = 100;
s1.y = 100;
addChild(s1);
s2 = new Sprite();
s2.graphics.beginFill(0x0000FF, 0.5);
s2.graphics.drawRect(0, 0, 50, 50);
s2.graphics.endFill();
s2.x = 100;
s2.y = 100;
s1.addChild(s2);
s2.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
}
private function mouseDownListener(e:MouseEvent):void
{
s1.addEventListener(MouseEvent.ROLL_OUT, roolOutListener);
stage.addEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
s1.addEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
shift.x = e.localX;
shift.y = e.localY;
//s2.removeEventListener(MouseEvent.MOUSE_DOWN, mouseDownListener);
s2.mouseEnabled = false;
s2.mouseChildren = false;
}
private function mouseMoveListener(e:MouseEvent):void
{
s2.x = s1.mouseX - shift.x;
s2.y = s1.mouseY - shift.y;
}
private function mouseUpListener(e:MouseEvent):void
{
s1.removeEventListener(MouseEvent.ROLL_OUT, roolOutListener);
stage.removeEventListener(MouseEvent.MOUSE_UP, mouseUpListener);
s1.removeEventListener(MouseEvent.MOUSE_MOVE, mouseMoveListener);
}
private function roolOutListener(e:MouseEvent):void
{
trace("roll out");
}
}
}
Добавлено через 3 часа 9 минут
Все разобрался: "mouseEnabled = false" просто не пробрасывает сообщение к элементу, но проверка для верхнего спрайта все так же работает.