+ 1 @divillysausages:)
тогда вы можете сделать что-то грязное и "вручную" отслеживать изменения.
класс MovieClip является динамическим, поэтому мы можем создавать переменные для хранения последней позиции X / Y, а затем выполнять дельту для EnterFrame. если дельта не равна 0, клип переместился.
это действительно ужасно:
package
{
import flash.display.MovieClip;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
public class Mover extends Sprite
{
private var mc:MovieClip;
public function Mover()
{
mc = new MovieClip();
mc.graphics.beginFill( 0xCC00FF );
mc.graphics.drawRect( 0, 0, 50, 50 );
addChild( mc );
//storing dynamic properties
mc.lx = mc.x;
mc.ly = mc.y;
//and add monitoring function
mc.addEventListener( Event.ENTER_FRAME, onEnterFrameHandler );
mc.addEventListener( MouseEvent.MOUSE_DOWN, mouseHandler );
mc.addEventListener( MouseEvent.MOUSE_UP, mouseHandler );
//move clip from outisde
// this.addEventListener( Event.ENTER_FRAME, moveClipHandler );
}
private function moveClipHandler(e:Event):void
{
mc.x++
}
private function mouseHandler(e:MouseEvent):void
{
switch( e.type )
{
case MouseEvent.MOUSE_DOWN: ( e.target as MovieClip ).startDrag(); break;
case MouseEvent.MOUSE_UP: ( e.target as MovieClip ).stopDrag(); break;
}
}
private function onEnterFrameHandler(e:Event):void
{
var m:MovieClip = e.target as MovieClip;
//check the delta
if ( m.x != m.lx || m.y != m.ly ) trace( 'moved!' );
m.lx = m.x;
m.ly = m.y;
}
}
}
но это работает:)
было бы неплохо централизовать дельта-проверки в классе, который дал бы возможность регистрировать / отменять регистрацию клипов и объектов DisplayObject по мере необходимости.