This is a discussion on startDrag controllato con Flash CS3 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Eccoci ad un altro piccolo cambiamento avvenuto tra Actionscript 2.0 ed Actionscript 3.0 .
Il metodo startDrag della classe ...
Eccoci ad un altro piccolo cambiamento avvenuto tra Actionscript 2.0 ed Actionscript 3.0 .
Il metodo startDrag della classe MovieClip è stato ( a mio parere ) migliorato significativamente e senza apportare grandi cambiamenti.
Ecco cosa è cambiato...
Con Actionscript 2.0, si poteva controllare il trascinamento di una MovieClip utilizzando appunto il metodo startDrag che voleva 5 parametri :
- lock center: true o false, specifica mentre la MovieClip viene draggata se il suo centro è il centro del Mouse ( true ) oppure se il centro è il punto dove l'utente esegue il click ( false ).
- left: massimo punto a sinistra di trascinamento
- top: massimo punto in alto di trascinamento
- right: massimo punto destro di trascinamento
- bottom: massimo punto in basso di trascinamento
Con Actionscript 3.0, il trascinamento della MovieClip viene controllato passando una istanza della Classe Rectangle al nostro metodo startDrag, quindi adesso il metodo stesso accetta solo 2 parametri:
- lock center: uguale ad Actionscript 2.0
- bounds: istanza della Classe Rectangle
Per utilizzare il parametro bounds basta creare un rettangolo virtuale ricordandosi che bastano 4 semplici parametri per creare un oggetto Rectangle e cioè:
- x: la coordinata x da dove parte il rettangolo
- y: la coordinata y da dove parte il rettangolo
- width: la larghezza del rettangolo
- height: l' altezza del rettangolo
Quindi, come si può vedere dalla classe che ho scritto:
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();
}
}
}
Risultato:
In questo caso, invece di creare una sorta di rettangolo virtuale con nuove coordinate, ho passato al metodo startDrag le coordinate di sfondo_mc.