Funkce drag a drop umožní chycení a puštění objektu myší.
chycení objektu:
jménoObjektu.startDrag();
puštění objektu:
jménoObjektu.stopDrag();
Drag a drop je nutné navázat na určitou akci, např. kliknutí myši. Aby byl objekt zachycen kliknutím a puštěn s uvolněním myši, startDrag spustí posluchač zmáčknutí tlačítka MOUSE_DOWN (jen zmáčknutí, celé kliknutí se skládá ze zmáčknutí a puštění).¨ StopDrag spustí posluchač uvolnění myši MOUSE_UP.
Příklad:
cepice_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); masleModra_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); masleCervena_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); bryle_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); function chyt(e:MouseEvent): void{ e.target.startDrag(); } cepice_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); masleModra_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); masleCervena_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); bryle_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); function Pust(e:MouseEvent):void{ e.target.stopDrag(); }
Drag and Dropp + addChild
Posunutí na horní vrstvu
karta1_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); karta2_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); karta3_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); karta4_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); function chyt(e:MouseEvent): void{ e.currentTarget.startDrag(); addChild(e.currentTarget as MovieClip); } karta1_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); karta2_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); karta3_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); karta4_mc.addEventListener(MouseEvent.MOUSE_UP, Pust); function Pust(e:MouseEvent):void{ e.currentTarget.stopDrag(); }
Drag and Dropp + addChild + removeChild
Při addChild se původní MovieClip smaže a vytvoří se nový se stejnými vlastnostmi, ale je posazený do nejvyšší vrstvy. Díky tomu se umístí nad ostatní objekty. To ovšem může být problém, pokud přecházíme mezi jednotlivými scénami, protože objekty se připojí ke stage, která se s jednotlivými scénami nemění. Objekty by nám v okně zůstaly i při přechodu na jinou scénu. Proto je potřeba je při odchodu ze scény odebrat pomocí příkazu removeChild. Proto, aby tento příkaz fungoval správně, je potřeba přidat všem objektům addChild už při vstupu na scénu. (V jiném případě, pokud by nebyly uživatelem aktivovány všechny objekty, by removeChild vyhodil eror. Tomu se zabrání, když se adChild dá hned na začátku bez ohledu na klikání uživatele.)
Příklad:
import flash.events.MouseEvent; import flash.display.MovieClip; //************definice funkci ************************ function pridejDeti():void{ addChild(ciro_mc) addChild(kosile_mc); addChild(bryle_mc); addChild(pasek_mc); } function odstranDeti():void { removeChild(ciro_mc); removeChild(kosile_mc); removeChild(bryle_mc); removeChild(pasek_mc); } function chyt(e:MouseEvent) { e.currentTarget.startDrag(); addChild(e.currentTarget as MovieClip); } function pust(e:MouseEvent) { e.currentTarget.stopDrag(); } //*************** volani funkci ************ pridejDeti(); ciro_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); ciro_mc.addEventListener(MouseEvent.MOUSE_UP, pust); bryle_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); bryle_mc.addEventListener(MouseEvent.MOUSE_UP, pust); kosile_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); kosile_mc.addEventListener(MouseEvent.MOUSE_UP, pust); pasek_mc.addEventListener(MouseEvent.MOUSE_DOWN, chyt); pasek_mc.addEventListener(MouseEvent.MOUSE_UP, pust);