import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.display.MovieClip;
stop();//在第一帧停止
var startX:Number = dragMc.x;//将舞台上的dragMc的x坐标存放一个变量中
var startY:Number = dragMc.y;//将舞台上的dragMc的x坐标存放一个变量中
var myRect:Rectangle = new Rectangle(startX,startY,slideMc.width - dragMc.width,0); ??//dragMc的拖动限制矩形
var rt:MovieClip = root as MovieClip;
dragMc.buttonMode = true;
dragMc.addEventListener(MouseEvent.MOUSE_DOWN,ondown);
stage.addEventListener(MouseEvent.MOUSE_UP,onup);//给stage添加鼠标释放侦听,而不是针对dragMc。读者可以尝试给dragMc添加的情形
functionondown(e:MouseEvent):void
{
dragMc.startDrag(true,myRect);
dragMc.addEventListener(Event.ENTER_FRAME,onframe);
}
functiononup(e:MouseEvent):void
{
if (this.currentFrame == this.totalFrames)//看舞台帧是否在第二帧
{
return;
}
else
{
dragMc.removeEventListener(Event.ENTER_FRAME,onframe);
dragMc.stopDrag();
}
/********onup函数刚开始我在里面是这么写的
dragMc.removeEventListener(Event.ENTER_FRAME,onframe);
dragMc.stopDrag();
并没有if---else语句,这么写为什么会报空对象的错误呢?按照这个例子,有可能在第二帧才释放鼠标。如果在第二帧,舞台上并没有对象dragMc,而直接写dragMc.removeEventListener(Event.ENTER_FRAME,onframe);的话就会报上面的错误。**********************/
}
functiononframe(e:Event):void
{
if (dragMc.x >= slideMc.x + slideMc.width / 2 - dragMc.width * 2 / 3)
{
dragMc.removeEventListener(Event.ENTER_FRAME,onframe);
gotoAndStop(2);
/**********刚开始编写代码的时候,我把gotoAndStop(2)写在了语句 dragMc.removeEventListener(Event.ENTER_FRAME,onframe); 的前面,就报了空对象的错误。问题就在这里,如果先执行舞台帧停止在第二帧,再执行dragMc删除侦听的话,就会出现这种错误,原因还是舞台第二帧并没有dragMc对象。********************/ } }