This is a discussion on StartDrag with Flash CS3 - Actionscript 3.0 within the Tutorials forums, part of the Flash English category; Here is another small change that happened from Actionscript 2.0 to Actionscript 3.0 . The method startDrag of the MovieClip ...
Here is another small change that happened from Actionscript 2.0 to Actionscript 3.0 .
The method startDrag of the MovieClip class has been ( in my opinion ) significantly improved without major changes.
Here are those changes?
Within Actionscript 2.0, you could control the drag of a MovieClip using, in fact, startDrag with its 5 parameters :
lock center: true or false, specifies if, while dragging the MovieClip, its centre corresponds to the Mouse centre ( true ) or the point where the click happened ( false ).
left: leftmost drag point
top: uppermost drag point
right: rightmost drag point
bottom: lowermost drag point
Within Actionscript 3.0, the drag is controlled by passing an instance of the Rectangle class to the startDrag method, which now accepts only 2 parameters:
lock center: as in Actionscript 2.0
bounds: Rectangle class instance
In order to use the bounds parameter, it?s sufficient to create a virtual rectangle remembering that only 4 simple parameters are needed to create a Rectangle object:
x: the x coordinate where the rectangle begins
y: the y coordinate where the rectangle begins
width: the width of the rectangle
height: its height
So, as you can see in the class I?ve written:
The result:Code:package { import flash.display.MovieClip; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Rectangle; public class Controllo extends MovieClip { private var rect:Rectangle; public function Controllo() { init(); } private function init():void { stage.frameRate=31; ball_mc.x=sfondo_mc.x; ball_mc.y=sfondo_mc.y; ball_mc.buttonMode=true; initRectangle(); initListener(); } private function initRectangle():void { rect=new Rectangle(sfondo_mc.x-sfondo_mc.width/2+ball_mc.width/2, sfondo_mc.y-sfondo_mc.height/2+ball_mc.height/2, sfondo_mc.width-ball_mc.width, sfondo_mc.height-ball_mc.height); } private function initListener():void { ball_mc.addEventListener(MouseEvent.MOUSE_DOWN,iniziaDrag); stage.addEventListener(MouseEvent.MOUSE_UP,stoppaDrag); } private function iniziaDrag(e:MouseEvent):void { ball_mc.startDrag(false,rect); } private function stoppaDrag(e:MouseEvent):void { ball_mc.stopDrag(); } } }
In this case, instead of creating a sort of virtual rectangle with new coordinates, I?ve passed the coordinates of sfondo_mc to the startDrag method.
Stay tuned !
Bookmarks