MX - Buttons faden per AS

black-dog

Erfahrenes Mitglied
Ich habe eine Schaltfläche und gebe ihr den Instanznamen "BUTTON". Ich möchte diese nun per AS so programmieren, dass diese bei RollOver die Farbe ändert (Fading-Animation).

Normalerweise macht man da soweit ich weiss einen MovieClip, der im ersten Frame den Wert verändert und beim zweiten zurückspult!? Geht das auch in einem Frame? Ich möchte nicht in jedem Button beim "darüber"-schlüsselbild ein solches MC platzieren.
 
Hi,

AS einach AUF den Button legen:

PHP:
on (rollOver) {
	var controller = this.createEmptyMovieClip ("fader", 1);
	controller.onEnterFrame = function () {
		_root.BUTTON._alpha += 5;
		if (_root.BUTTON._alpha >= 100) {
			delete this.onEnterFrame;
		}
	};
}
on (rollOut) {
	var controller = this.createEmptyMovieClip ("fader", 1);
	controller.onEnterFrame = function () {
		_root.BUTTON._alpha -= 5;
		if (_root.BUTTON._alpha <= 50) {
			delete this.onEnterFrame;
		}
	};
}

Grüsse

B
 
OK, das Teil funktioniert einwandfrei!

Vielen Dank. Ich werd gleich den einen oder anderen Begriff nachschlagen müssen und melde mich dann evtl. nochmals !
 
wie schon angekündigt noch die eine oder andere Frage:

- wozu createEmptyMovieClip? was bewirkt dieser Befehl? Welches sind die Vorteile dieser Methode
- controller.onEnterFrame = function () { - bin ich richtig in der annahme, dass durch onEnterFrame die Aktion wiederholt wird. D.h. das alpha+5 wiederholt wird und der Wert nicht nur einmalig um 5 erhöht wird?
 
Hi,

-createEmptyMovieclip macht nichts anderes als einen leeren MC dynamisch zu erstellen. Du siehst ihn also während der ..>Laufzeit im ...>Debugger.

-ein MC hat viele Eigenschaften die über die von Buttons oder Graphiken hinausgehen, so hat jeder MC zB seine eigene ...> Zeitleiste, und mit der Zeitleiste natürlich auch ein onEnterFrame Ereignis, als Suchwort in diesem Forum würde ich dir Ereignis und Ereignismodell empfehlen.

- Was macht das Script ?

Es fragt zwei Zustände ab, nämlich
1.) ich bewege die Maus auf den Button, und
2.) ich bewege die Maus wieder weg.

in beiden Fällen erstellen wir nun einen leeren MC (mit eigener Zeitleiste), geben ihm eine Bezeichnung und einen Ort, und danach missbrauchen wir ihn als Lieferant (Promotor) für das jeder Zeitleiste gegebene on EnterFrame Event, sagen ihm was er denn onEnterFrame machen soll, und wenn der Mohr seine Schuldigkeit getan hat, beseitigen wir ihn unsanft, der Vollständigkeit halber und der Performance in grösseren Projekten geschuldet entfernen wir zuerst den "Listener" des onEnterFrame Events mit 'delete this.onEnterFrame;', danach solltest du noch ein this.unloadMovie() einfügen und das script ist perfekt.

Wenn du wirklich lernen willst, dann kommst du um den richtig verstandenen Gebrauch von Debugger, trace(), und Breakpoints nicht herum, ausserdem täte dir eine exakte Klärung der Begriffe Ereignismodel, Listener, Ereignis (Event) und D(ocument) O(bject) M(odelling) sehr gut.

Grüsse
B
 
Vielen Dank für die Antwort.

Ich habe die Begriffe nachgeguckt und glaube, etwas schlauer geworden zu sein. Den Begriff D(ocument) O(bject) M(odelling) konnte ich aber leider nicht finden. Kann mir jemand eine Kleinigkeit dazu erzählen?

Das Script selber ist mir nun ziemlich klar. Ich habe nicht gewusst, dass durch THIS.create... ein MC erstellt werden kann, dass in Grösse und Positionierung meiner Schaltfläche identisch ist.

Danke liebes Forum :-)
 
...> DOM ist ein allgemeiner Begriff aus der bunten Welt der Programmiersprachen, schau mal unter google - einfach gesagt bedeutet es nichts anderes, als das zumindes jede objektorientierte Sprache ein Modell der Objekte des Dokumentes braucht, um klar zu sehen. Das heisst, 1. eine Hierarchie / einen Baum 2. EIne Objektdefinition, Regeln zum Methodenaufruf sowie das Ereignismodell. Das alles zusammen bildet dann Flash AS - wenn dir das klarer ist, dann werden deine Fragen zum Thema Pfade, Referenzierungen und Objekten allmählich versiegen....

- create Empty Movie´Clip, erzeugt NICHT einen MC der in Grösse und Position dem aufrufendem Button ähnlich wäre, sondern vielmehr einen sogenannten 0px MC mit den Koordinaten 0,0.

Grüsse
B
 
hi,
also ich habe diese buttons bei mir auch ausprobiert. jedoch funktionieren sie nicht so, wie ich eigentlich will :)

geht man zu schnell über das menü, so bleiben die buttons beim rollout trotzdem noch gefärbt. seht selbst: Menue
ich hoffe ihr könnt mir helfen :)

mfg

Matthias S.
 
Hi,

ersetze einfach den MC Namen 'fader' durch unique Begriffe wie zB fadein und fadeout, dann hat sich die Problematik.....

B
 
Hey,

war genau das, was ich gesucht habe. Auch wenn dieser Pfad schon etwas älter ist, er ist immernoch sehr brauchbar. Die Suche lohnte sich also.
Wollte einen Button dazu bringen, sich auszufaden, wenn man draufklickt und bin immer daran gescheitert, dass es eben kein MC ist.

Danke Basileus.;-)

Hier der geringst abgeänderte AS von Basileus, für die, die das gleiche Problem haben:

PHP:
on (release) { 
  	var controller = this.createEmptyMovieClip ("fader", 1);
  	controller.onEnterFrame = function () {
  		_root.BUTTON._alpha -= 5;
  		if (_root.BUTTON._alpha <= 0) {
  			delete this.onEnterFrame;
  		}
  	};
  }

LG
benchmark:)
 
Zurück