Weniger ist mehr :)(AS-Teil)

Oder "Wie baue ich ein ansprechendes Menü, ohne die ressourcenfressenden Tweenings einzusetzen"
ActionScript

Weiter unten wird der Aufbau vom MC "zoomer", die Buttons-Aktionen und die Bedeutung der Variablen "z" erklärt.




MC "zoomer"

Der MC "zoomer" ist in unserem Menü für die Animation verantwortlich. Er besteht aus 2 Keyframes.

Keyframe 1:

1
Set Variable: "i" = 1
2
Loop While (i <= 8)
3

If (i = n)

4

If (GetProperty ("/btn" & n,_xscale) < 130)

5

Set Property ("/btn" & n, X-Skalierung) = GetProperty ("/btn" & n,_xscale) + z

6

Set Property ("/btn" & n, Y-Skalierung) = GetProperty ("/btn" & n,_yscale) + z

7

End If

8

Else If (i <> n)

9

If (GetProperty ("/btn" & i,_xscale) > 100)

10

Set Property ("/btn" & i, X-Skalierung) = GetProperty ("/btn" & i,_xscale) - z

11

Set Property ("/btn" & i, Y-Skalierung) = GetProperty ("/btn" & i,_yscale) - z

12

End If

13

End If

14

Set Variable: "i" = i + 1

15
End Loop

Erklärung:

Zeile 1. Es wird eine Laufvariable "i" deklariert. Dabei wird ihr der Wert "1" zugewiesen.
Zeile 2. Eine Loop-Anweisung wird eingeleitet. Diese wird nur dann ausgeführt, wenn i kleiner oder gleich 8 ist.
Zeile 3. Eine If-Anweisung wird eingeleitet. Diese wird nur ausgeführt, wenn i gleich n ist.

Zeile 4.

Wenn die Bedingung aus Zeile 3 erfüllt ist (i=n), wird eine weitere If-Anweisung eingeleitet. Diese wird nur ausgeführt, wenn der X-Skalierungswert der Instanz "/btn" & n kleiner als 130% ist
Zeile 5. Wenn die Bedingung aus Zeile 4 erfüllt ist, werden die Eigenschaften (in diesem Fall die Skalierung) der Instanz "/btn" & n verändert.
Zeile 6. s. Zeile 5
Zeile 7. Die If-Anweisung aus Zeile 4 wird geschlossen
Zeile 8. Diese Anweisung spricht alle Fälle, die mit der If-Anweisung in der Zeile 3 nicht erfasst wurden, an.
Zeile 9. Wenn die Bedingung aus Zeile 8 erfüllt ist (i <> n), wird eine weitere If-Anweisung eingeleitet. Diese wird nur ausgeführt, wenn der X-Skalierungswert der Instanz "/btn" & i größer als 100% ist
Zeile 10. Wenn die Bedingung aus Zeile 9erfüllt ist, werden die Eigenschaften (in diesem Fall die Skalierung) der Instanz "/btn" & i verändert.
Zeile 11. s. Zeile 10
Zeile 12. Die If-Anweisung aus Zeile 9 wird geschlossen
Zeile 13. Die If-Anweisung aus Zeile 3 wird geschlossen
Zeile 14. Die Variable "i" wird um 1 erhöht
Zeile 15. Die Loop-Anweisung aus Zeile 2 wird geschlossen. Wir verlassen den Keyframe 1 und gehen zum Keyframe 2 :)

Keyframe 2 enthält nur die Anweisung "Go to and Play (1)". Man könnte diese Anweisung weglassen, aber dann wird die Animation nicht so flüssig (zumindest nicht auf meinem PC)





Buttons

Die Buttons in diesem Menü reagieren 1. wenn der Mauszeiger über dem Button ist und 2. wenn der Mauszeiger die Buttonfläche verlässt. Ich habe die Klick-Anweisung nicht eingebaut, weil es hier nicht nötig ist :) An den AS des Buttons kann man unter anderem durch Doppelklick auf den Button im Bearbeitungsmodus des MC's rankommen.

1 On (Roll Over) Hier wird bestimmt, was passieren soll, wenn der Mauszeiger über dem Button ist
2 Begin Tell Target ("/zoomer") Hier wird die Instanz "zoomer" angesprochen (in unserem Fall ist es der MC "zoomer")
3 Set Variable: "n" = 1 Es wird IN der Instanz "zoomer" eine Variable "n" deklariert, der Wert "1" (als Ausdruck) zugewiesen wird
4 End Tell Target  
5 End On  
6 On (Roll Out) Hier wird bestimmt, was passieren soll, wenn der Mauszeiger die Buttonfläche verlässt
7 Begin Tell Target ("/zoomer") Und wieder wird die Instanz "zoomer" angesprochen
8 Set Variable: "n" = "" Der Variablen "n" wird der Wert "" (NICHTS als Zeichenfolge) zugewiesen
9 End Tell Target  
10 End On  

Was passiert nun, wenn der Mauszeiger über einem Button ist? Es wird eine Variable im "zoomer" deklariert, die der Nummer des Button-MC's entspricht. Also, wenn man mit der Maus über den MC "button1" mit dem Instanznamen (s. vorherige Seite) "btn1" fährt, dann wird n=1 gesetzt, bei "btn2" wird n=2 usw. Alles klar? Der "zoomer" läft die ganze Zeit im Hintergrund (was man natürlich auch ändern kann, aber nicht unbedingt erforderlich ist). Da er aber am Anfang noch kein n-Wert bekommen hat, tut sich visuel garnichts. Die Variable "i" wird hochgezählt. Man könnte den Wert "8" in der Loop-Anweisung auch gleich 3 setzen, weil wir ja nur 3 Buttons haben, wenn wir aber uns entscheiden, mehr Buttons zu machen, dann haben wir weniger Klick-/Tipparbeit :) So, wenn "n" einem existierenden MC entspricht, dann wird die Bedingung aus Zeile 3 erfüllt und die Eigenschaften des MC's verändert. Um die Instanz zu ermitteln, welche wir verändern wollen, wird der Name aus "/btn" und dem n-Wert zusammengesetzt. Die Anweisung If (GetProperty ("/btn" & n,...) ist ein Beispiel für so einen zusammengesetzten Namen. Dieser muß als Ausdruck definiert sein! Wenn man nun die Buttonfläche verlässt, wird n ungleich i sein, weil wir ja n gleich "nichts" gesetzt haben. Nun wird aber auch die Bedingung in der Zeile 9 des "zoomers" erfüllt, was das Verändern der Eigenschaften ALLER (also von 1 bis 8 mit Ausnahme i=n) Instanzen mit sich führt, deren x-Skalierung größer als 100% ist. In diesem Fall wird der Name der Instanzen aus "/btn" und "i" zusammengesetzt.





Variable "z"

Was ist den nun die Variable "z"? Wozu ist das Ding gut? Nun, damit kann man bequem die Geschwindigkeit verändern, mit der die Animation abläuft. Nützlich kann sowas sein, wenn man ziemlich oft testet oder verschiedene Geschwindigkeiten verschiedenen Buttons zuweisen möchte (z.B wenn n=1, dann z=was weiß ich)

Szene 1, Keyframe 1

1 Begin Tell Target ("/zoomer")
2 Set Variable: "z" = 5
3 End Tell Target





So, das ist es gewesen. Oder hab ich was vergessen? Manch einer wird wohl sagen, daß es zu aufwendig ist, aber versucht es erst mal mit Tweening und dann nach dieser Methode zu machen - Ihr werdet den Unterschied merken :)

PS.: Man kann natürlich andere Eigenschaften auch verändern. Die Skalierungseigenschaft ist einfacher zu handhaben, weil hier der Wert 100% sozusagen fest gespeichert ist. Auf jeden Fall kann man dieses Beispiel auch auf andere Sachen als nur Menüs anwenden.