Siehe auch meinen Tipp AS3 drag Movieclip

startDrag ("quader", true);

Die Filmsequenz hat den Instanznamen "quader" bekommen und die Aktion befindet sich im ersten Schlüsselbild des Haupfilms.

Diese Möglichkeit gab es auch schon bei Flash 4.

Wie bei meinen anderen SWF Beispielen kann man das Actionscript markieren und kopieren (Strg C), um es dann im eigenen Aktion Bedienfeld einzufügen (Strg V).

onClipEvent (enterFrame) {    

    startDrag ("", true, 100, 70, 500, 350);

}

Hier wird die Action StartDrag dem Movie Clip zugewiesen. Daher braucht man

keinen Instanznamen, man kann aber auch this verwenden und zwar so:

Auch hier kann man "Maus zentrieren" aktivieren, im Action Script steht dann true.

Durch anklicken von "Immer als Rechteck" kann man die Koordinaten

eines Rechtecks angeben, in dem sich die Filmsequenz bewegen darf.

Das Rechteck wird durch den xy Wert der linken oberen Ecke und

den xy Wert der linken unteren Ecke definiert. In dieser Reihen-

folge stehen die Zahlen im Actionscript. Das Prinzip wird Html Kundigen

von Image Maps bekannt sein.

   startDrag (this, true, 100, 70, 500, 350);

onClipEvent (enterFrame) {

   Mouse.hide();

   startDrag ("", true);

}

onClipEvent (mouseDown) {

   this.gotoAndStop("pressed");

}

onClipEvent (mouseUp) {

   this.gotoAndStop("released");

}

on (rollOver) {

   with (_root.mauszeiger) {

       gotoAndStop ("warten");

   }

}

on (rollOut) {

   with (_root.mauszeiger) {

       gotoAndStop ("released");

   }

}

onClipEvent (enterFrame) {    _x=_root._xmouse;    

}

Hier liegt die Aktion wieder direkt im Movieclip selber.

Die Eigenschaft _x also horizontale  Position

wird mit _root._xmouse definiert.

_root (siehe Pfade.fla) bedeutet, daß die oberste Ebene also

der Hauptfilm gemeint ist und daraus die horizontale Mausposition

also _xmouse ausgelesen wird.

Das läßt sich selbstverständlich auch mit der vertikalen also der

y Position und _root._ymouse machen.

onClipEvent (enterFrame) {    Mouse.show();  

  _y=_root._ymouse;   

  _x = _x+_xmouse/6;   

  /:xmaus2 = _xmouse;

}

Hier haben wir es mit _xmouse ohne _root zu tun. Wie man an dem feststehendem Quader sehen kann, bedeutet _xmouse der Abstand zur Mausposition. Bewege dazu die Maus links und rechts zur feststehenden Filmsequenz und beobachte die Anzeige für /:xmaus1. Nun zum Skript für die bewegiliche Filmsequenz.

Die x Position lautet, die vorhandene X Position plus der Abstand zur Maus geteilt druch 6. Da bei jedem Bild (enterFrame) dieser Abstand jedesmal durch 6 geteilt wird, wird er natürlich immer kleiner bis er null ist.

So entsteht eine sehr dynamische Bewegung. Teile auch mal durch einen

anderen Wert und beobachte, was passiert. So kann man mit mehreren

Filmsequenzen und verschiedenen Werten eine Mausspur machen.

on (press) {

   startDrag ("/drag-me");

}

on (release) {

   stopDrag ();

}

Hier wurde ein Button in eine Filmsequenz mit Instanznamen drag-me eingebunden. Der Button hat obenstehendes Actionscript.

Auf Mausdruck wird die "drag" Action der Instanz namens drag-me gestartet.

Der Event Handler "onrelease" (Maus loslassen) beendet die die Ziehoperation mit der Action stopDrag.

Mit gedrückter Maustaste Objekt ziehen auch "drag and drop" genannt.

Movie

onClipEvent (mouseDown) {

   startDrag ("");

}onClipEvent (mouseUp) {

   stopDrag ();

}

onClipEvent (mouseDown) {

   startDrag ("", true);

}onClipEvent (mouseUp) {

   stopDrag ();

}

Irgendwo auf die Bühne klicken und mit gedrückter Maustaste ziehen.

Einziger Unterschied ist hier, daß "Maus zentrieren" aktiviert wurde, im Actionscript steht dann true. Dadruch springt die  Filmsequenz zur Mausposition

onClipEvent (mouseDown) {

   if (this.hitTest(_root._xmouse, _root._ymouse, true))

{        startDrag ("");

   }

}

onClipEvent (mouseUp) {

   if (this.hitTest(_root._xmouse, _root._ymouse, true))

{        stopDrag ();

   }

}

Zu diesem Beispiel muß man etwas über die Aktion "HitTest" wissen. Deshalb habe ich dieses Beispiel auch in dem HitTest Tip aufgeführt.

Hier wird die Mausposition mittels "HitTest" und einer if-Bedingung abgefragt. Nur wenn die Bedingung erfüllt ist, daß Mausposition und Filmposition identisch sind und die Maustaste gedrückt ist (Event Handler),  wird die Drag Action gestartet. Die Action wird wieder mittels Event Handler mouseUp gestoppt. Im HitTest Tip auf Seite 5 sieht man eine praktische Anwendung für dieses etwas umständliche Beispiel.

Objekt anklicken und mit gedrückter Maustaste ziehen.

Mausklicks auf die Rechtecke öffnet die Menues, welche man am oberen Balken per drag & drop verschieben kann. Jedes Menue ist ein Movieclip, welches im ersten Frame keine Grafiken und die Aktion Stop enthält, dadurch ist es zu Beginn unsichtbar. Per Buttonklick werden die nächsten Frames des entsprechenden Menues abgespielt. In den Menues oben rechts kann man das Menue ausblenden und zwar durch die Button-Aktion GotoAndStop Frame1. Der obere Balken der Menues besteht aus einem Button der folgende Aktion enthält.

on (release) {

with (menue1) {

gotoAndPlay(2);

}

_root.menue1.swapDepths( 1);

}

Der startDrag Aktion folgt der Instanzname des jeweiligen Menues.

Durch die Action swapDepths wird die z Position auf 1 gesetzt,  so daß das Menue oben liegt. Statt der Positionszahl kann man auch die Instanz einer

anderen Filmsequenz angeben, mit deren z Position getauscht werden soll.

Oder man gibt folgende Action ein, (eine Position höher als die höchste Position).

_root.getNextHighestDepth()

_root.menue1.swapDepths(_root.getNextHighestDepth());