Einfache Dekrementierungsanweisung...

SonMiko

Erfahrenes Mitglied
Ich möchte einen MC schrittweise um die Tranparenz dekrementieren.

Also ungefähr so:

PHP:
this.onEnterFrame=function(){
	face_mc._alpha=--;
	delete this.onEnterFrame;
}

Der MC heisst face_mc.
Was ist falsch?

Besten Dank,


Mike
 
Also eine Lösung habe ich, allerdings mit
drei Frames und jeweils drei Aktionen...
Sehr umständlich:
Frame 1:
PHP:
prozent=100;

Frame 2:
PHP:
this.face_mc._alpha=prozent--;

Frame 3:
PHP:
gotoAndPlay(2);

Gibts eine einfachere Lösung in einem Frame?
 
Zu deinem ersten Script im Startbeitrag und der Frage, was falsch ist:

"Übersetz" doch einfach mal was du machst in normale Umgangssprache. Das hilft in den meisten Fällen. Also:
Du legst einen Framedurchlauf an (on enterFrame)
In diesem setzt du deinen Alphawert um eins runter (wobei - nicht eher instanzname._alpha-- ?)
Aber du löschst (delete) diesen onEnterFrame-Event auch gleich einfach mal so beim ersten Durchlauf wieder, da es ja ohne weitere Anweisung eben in diesem steht.

Was passiert also bei diesem Script:
Einmal den Alphawert runter gesetzt -> gleich im ersten Durchlauf auch den onEnterFrame gelöscht -> logischerweise passiert dann nichts mehr weiter..

Lösungsansatz:
Prinzipiell so wie du es im ersten Frame geschrieben hast, aber die delete-Anweisung erst, wenn der Alphawert den gewünschten Endzustand erreicht hat oder kleiner ist. Dazu bedarf es einer if-Bedingung innerhalb des onEnterFrames im Sinne von

on Framedurchlauf
-> setze Alpha um eins runter
-> wenn! Alpha kleiner oder gleich einem bestimmten Wert
-> erst dann lösche den Framedurchlauf

Prinzip jetzt klarer?
Versuch's mal in ein Script umzusetzen.
 
Zuletzt bearbeitet:
Ist die OnEnterFrame Methode quasi mit einer art For-Schleife vergleichbar?
Also so, wie Wir sie nun gemacht haben meine ich?
Ein Wert muss erreicht sein, und solange wird etwas durchlaufen!
Quasi die For-Schleife die unmittelbar mit der Zeitleiste verbunden ist...?
Mir leuchtet langsam ein wie diverse Animationen zustande kommen...


Gruß,


Mike
 
Hi,

wenn Du das Ding schon mit einer Schleife vergleichen willst (was es eigentlich nicht ist - eher eine Art "Timer" bzw. Intervall), dann nimm die while-Schleife. ;)

Nach der Deklaration wird die onEnterFrame-Methode periodisch mit jedem Frameaufruf ausgeführt, und zwar theoretisch bis in alle Ewigkeit (oder bis Du sie mit einer Abbruchbedingung und der delete-Anweisung löschst). Genau wie Intervalle (vgl. setInterval) eignet sich die onEnterFrame-Methode gut zum Animieren von Objekten, da eine Aktualisierung der Inhalte in der Regel mit der Framerate synchronisiert werden soll.

In deinem Fall wäre das:
Code:
var speed = 2; // Werte pro Frame
this.onEnterFrame = function() {
    if (fade_mc._alpha >= speed) {
        fade_mc._alpha -= speed;
    } else {
        fade_mc._alpha = 0;
        delete this.onEnterFrame;
    }
}

Eine Schleife wird dagegen sofort abgearbeitet und wartet nicht auf irgendwelche Frames (vielmehr wird mit dem nächsten Frame gewartet, bis die Schleife abgearbeitet ist). Daher sind Schleifen auch nicht zur Animation geeignet.

Gruß
.
 
Zurück