So, nachdem ja in letzter Zeit wieder vermehrt Anfragen zum Thema "Release-Status bei Buttons"/"Overstatus behalten" und so kamen, hier mal ein kleiner Beitrag zu diesem Thema (hab in der Tut-Sektion nicht wirklich was dazu gefunden...). Erweiterungen/Verbesserungsvorschläge jederzeit gerne.
Ziel:
Ziel soll es sein, eine Reihe von Navigationselementen - nennen wir sie "Buttons" - mit einer folgender Interaktivität zu versehen:
Null-Zustand: Die Maus befindet sich außerhalb des Buttons und der Button wurde nicht angeklickt
Over-Status: Die Maus befindet sich über dem Button, der Button ändert sein Aussehen
Release-Status: Der Button wurde angeklickt, verändert sein Aussehen und behält dieses bei, nachdem die
Maus ihn verlassen hat. Er soll bis zu dem Zeitpunkt, wenn ein anderer Button angeklickt wurde, kein Button mehr sein (d.h. er reagiert nicht auf Mouseover und Klick, kein Hand-Cursor).
Vorbemerkung:
Ich benutze bewusst keine dynamisch generierten/duplizierten Objekte, um den Ball (für non-AS-Professionals) einigermaßen flach zu halten.
Dieses Tutorial ist für Flash MX gedacht, die Methodik funktioniert (leicht bis mittel) abgewandelt aber auch in Flash 5. Anfragen hierzu bitte gesondert an mich.
"Materialbedarf":
Für das Beispiel brauchen wir 5 Movieclips (keine Buttons – mit denen wird’s nix...). Der Einfachheit halber nehmen wir fünf rote Rechtecke, der Over-Zustand soll blau, der Release Zustand grün sein. Also flugs einen MC mit diesen drei Frames und jeweils darin befindlichen Stops erstellt, und diesen viermal auf der Bühne dupliziert. Instanznamen vergeben: mc1 bis mc5 (was sonst...)
Prinzip:
Der Button-MC, der gerade geklickt wurde, meldet sich in einer "zentralen Verwaltungsinstanz" an, führt seine Navigations-Aktion aus, geht in den Release-Status und reagiert nicht mehr auf sämtliche Mausaktionen. Wird ein anderer Button-MC geklickt, schmeisst dieser den vorigen bei der Verwaltung raus und setzt sich selbst rein. Der zuvor angeklickte Button wird wieder "normal", reagiert wieder auf Mausaktionen usw. Diese Verwaltungs-Funktion übernimmt eine schlichte Variable, die ich "clicked" nenne. Here we go...
ActionScript:
//frame 1 auf _root
var clicked;
//
for(var i = 1;i <= 5;i++) {
this["mc"+i ].onRollOver = function() {
if(this != _root.clicked) {
this.gotoAndStop(2);
}
};
this["mc"+i].onRollOut = this["mc"+i].onReleaseOutside = function() {
if(this != _root.clicked) {
this.gotoAndStop(1);
}
};
this["mc"+i].onRelease = function() {
if(this != _root.clicked) {
//hier die Navigations-Aktion
this.gotoAndStop(3);
_root.clicked.gotoAndStop(1);
_root.clicked.useHandCursor = true;
_root.clicked = this;
this.useHandCursor = false;
}
};
}
Gruß,
Tom