Rheinwerk Design < openbook > Rheinwerk Design - Know-how für Kreative.
Know-how für Kreative

 << zurück
ActionScript 1 und 2 von Sascha Wolter (http://www.saschawolter.de/)
Objektorientierung und Codedesign mit Flash MX 2004
Buch: ActionScript 1 und 2

ActionScript 1 und 2
672 S., mit CD, Referenzkarte, 44,90 Euro
Rheinwerk Design
ISBN 3-89842-221-6
gp Kapitel 20 Aussergewoehnliche Benutzerfuehrung
  gp 20.1 Tastatur
  gp 20.2 Maus
  gp 20.3 Ton
  gp 20.4 Bewegung


Rheinwerk Design - Zum Seitenanfang

20.2 Maus  toptop

Grafisch orientierte Anwender bevorzugen die Bedienung durch die Maus und weniger per Kommandozeile, so wie es die meisten modernen Benutzeroberflächen inspiriert vom Xerox Parc (http://www.parc.xerox.com/) und Apple (http://www.apple.com/) vormachen.

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 20.4   Ein Mausverfolger kann bereits mit nur zwei Anweisungen realisiert werden.

Mausverfolger

Ein etwas abgegriffener Klassiker ist der Mausverfolger, der bereits mit wenigen Zeilen Programmcode erreicht wird. Dieser basiert auf der Idee, dass sich ein Objekt der Maus langsam annähert. Der zugrunde liegende Algorithmus ermittelt dazu bei jedem Bildwechsel den horizontalen und vertikalen Abstand zwischen Mauszeiger und Objekt und nähert das Objekt dem Mauszeiger um jeweils einen Bruchteil dieses Abstandes an:

mausver-folger.fla
// Einfache Ereignismethode für Mausverfolger
monster_mc.onEnterFrame = function () {
   // Lege "Verzögerung" fest
   var delay = 16;
   // Ermittle Abstand zur Maus
   var dx = this._xmouse;
   var dy = this._ymouse;
   // Nähere Objekt der Maus an
   this._x = this._x + (dx/delay);
   this._y = this._y + (dy/delay);
}

Falls Sie den Mausverfolger auf die horizontale oder vertikale Bewegung einschränken, kann dies z.B. für Navigationsleisten ŕ la Yugop (http://yugop.com/ver2/) verwendet werden.

Yugop

Ein Klassiker bei der Verwendung innovativer Navigationsformen ist die Site »MONO*crafts« von Yugo Nakamura, kurz Yugop (http://yugop.com/ver2/).

Mausposition

Die Mausposition lässt sich aber nicht nur direkt mit Positionsangaben verbinden, sondern dient auf Wunsch als Wertelieferant für beliebige andere Eigenschaften. Beispielsweise lässt sich mit Hilfe der Mausposition ein Sound von links nach rechts verändern:

soundsteuerung.fla
this.my_sound = new Sound(_root);
this.onEnterFrame = function () {
   // Verwende alternativ setTransform
   this.my_sound.setPan((this._xmouse-275)/2.75);
}

oder die Farbigkeit eines Objekts variieren

farbigkeit.fla
this.my_color = new Color(monster_mc);
this.onEnterFrame = function () {
   // Verwende alternativ setTransform
   this.my_color.setRGB(this._xmouse);
}
Drag and Drop

Eine weitere Variante der Maussteuerung ist Drag and Drop. Das Ziehen und Loslassen von Objekten bietet sich beispielsweise bei Lernsystemen an. Aber auch Rollbalken (engl. Scrollbars) machen Gebrauch davon.

Das Ziehen eines Objekts starten Sie mit Hilfe der Methode startDrag, sobald der Anwender auf das Objekt klickt. Die Methode erfordert von Ihnen als ersten Parameter, ob das Objekt direkt unter dem Mauszeiger liegen soll (true) oder sich relativ zum Mauszeiger bewegt (false). Für Drag and Drop bietet sich meist eine relative Bewegung zum Mauszeiger an, da ja ohnehin direkt auf das betreffende Objekt geklickt wird:

drag.fla
monster_mc.onPress = function () {
   this.startDrag(false);
}

Um ein Objekt nun loslassen zu können, kommen die Methode stopDrag und das Ereignis onRelease (beim Loslassen) zum Einsatz:

drag and drop.fla
monster_mc.onRelease = function() {
   this.stopDrag();
};

Bei Anwendern mit einer schnellen »Maushand« kann es bei diesem Skript jedoch vorkommen, dass die Maus schneller als das eigentlich gezogene Objekt ist und sich das Objekt beim Loslassen noch gar nicht unter dem Mauszeiger befindet. Dies führt dazu, dass das Objekt dann weiterhin am Mauszeiger klebt. Ein einfacher Trick zur Lösung des Problems ist, dass das Ziehen auch dann beendet wird, wenn die Maustaste außerhalb losgelassen wird (onReleaseOutside). Da es sich in diesem Fall um dieselbe Funktion handelt wie beim normalen Loslassen, kann diese gleich doppelt verwendet werden:

drag and drop komplett.fla
// Drag...
monster_mc.onPress = function() {
   this.startDrag(false);
};
// ...and Drop
monster_mc.onRelease = function() {
   this.stopDrag();
};
monster_mc.onReleaseOutside = monster_mc.onRelease;
Rollbalken

Beinahe dasselbe Skript kommt für die bereits erwähnten Rollbalken zum Einsatz. Dabei machen Sie sich vier weitere optionale Parameter der startDrag-Methode zu Eigen, mit denen Sie einen Bereich bestimmen, in dem sich das Objekt befinden darf. Das Ziehen eines Objekts kann auf einen rechteckigen Bereich beschränkt werden. Den Bereich legen Sie anhand der linken, oberen, rechten und unteren Kante in Pixel fest:

this.startDrag(false, 75, 50, 475, 350);
drag and drop beschränkt.fla

Wenn Sie nun diesen rechteckigen Bereich zu einer Linie schrumpfen lassen, dann haben Sie einen Rollbalken, dessen Position letztendlich dem eingestellten Wert entspricht. Rollbalken sind eigentlich nichts anderes als Drag and Drop. Diesen Wert können Sie dann zur Steuerung anderer Eigenschaften mit ein wenig Dreisatz übernehmen:

scrollbar.fla
button_mc.onPress = function() {
___this.startDrag(true,_320,_80,_320,_280);
};
button_mc.onRelease_=_function()_{
___this.stopDrag();
___//_Uebernehme_eingestellten_Wert
___var_value_=_(this._y-80)/200;
___trace(value);
___monster_mc.rightArm_mc._rotation_=_value*360;
};
button_mc.onReleaseOutside_=_button_mc.onRelease;

Besonders flexibel ist es, wenn Sie einen Rollbalken in einen Movieclip in Form einer wieder verwendbaren Komponente packen. Denn in diesem Fall beziehen sich die gesamte Programmierung und die Ermittlung des Wertes auf den Movieclip, so dass Sie diesen ohne Auswirkung beinahe beliebig transformieren dürfen. Um die Werte nutzen zu können, verwenden Sie innerhalb der Komponente den Aufruf einer selbst definierten onChange-Methode:

button_mc.onRelease = function() {
   this.stopDrag();
   // Übernehme eingestellten Wert
   var value = this._y/200;
   onChange(value);
};
scrollbar als einfache komponente.fla

Die onChange-Methode nutzen Sie dann direkt aus Ihrem Projekt heraus in der folgenden Form:

scrollbar1_mc.onChange_=_function_(value)_{
___monster_mc._yscale_=_value_*_100;
}
scrollbar2_mc.onChange_=_function_(value)_{
___monster_mc._rotation_=_value_*_360;
}

Abbildung
Hier klicken, um das Bild zu Vergrößern

Abbildung 20.5   Es muss nicht immer eine Maus sein: Auch Trackballs und andere Eingabegeräte sind erlaubt.

Trackballs

Die Maus kann aber auch durch andere Eingabeinstrumente wie Trackballs ersetzt werden. Und einige Messgeräte erlauben es, dass Sie Ihre Daten wie Mausbewegungen an den Rechner schicken, denn letztendlich können die Werte für die X- und Y-Bewegung der Maus mit der Hilfe eines geschickten Bastlers auch von einem Temperatur- oder Feuchtigkeitsmesser generiert werden.

 << zurück
  
  Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: ActionScript 1 und 2
ActionScript 1 und 2
bestellen
 Ihre Meinung?
Wie hat Ihnen das Openbook gefallen?
Ihre Meinung

 Buchtipps
Zum Rheinwerk-Shop: JavaScript






 JavaScript


Zum Rheinwerk-Shop: jQuery






 jQuery


Zum Rheinwerk-Shop: Responsive Webdesign






 Responsive Webdesign


Zum Rheinwerk-Shop: Suchmaschinen-Optimierung






 Suchmaschinen-
 Optimierung


Zum Rheinwerk-Shop: Schrödinger lernt HTML5, CSS3 und JavaScript






 Schrödinger lernt
 HTML5, CSS3
 und JavaScript


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2005
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


Nutzungsbestimmungen | Datenschutz | Impressum

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern