Color Fade

Dipsi

Mitglied
Hallo

Ich will den Hintergrund dynamisch ändern.
Also wenn ich auf einen Button drücke wird der Hintergrund rot.
Wenn ich auf einen anderen Button drücke wird der Hintergrund z.B. blau.

Denn Code für das habe ich gefunden.
Code:
function ColorFade(target, color, speed) 
{
 duplicateMovieClip(target, "duplicate_mc", 100);
 duplicate_mc._alpha = 0;
 var new_color:Color = new Color(duplicate_mc);
 var target_color:Color = new Color(target);
 new_color.setRGB(color);
 this.onEnterFrame = function() 
{
  if (duplicate_mc._alpha > 99) 
  {
   delete this.onEnterFrame;
   target_color.setRGB(color);
   removeMovieClip(duplicate_mc);
   } 
   else 
   {
	duplicate_mc._alpha += speed/2;
   }
 }
}

// Aufruf des Fades
ColorFade("_root.BGColor_mc", "0xB19523", 5);
stop();

Aber wenn ich auf einen Button drücke... verschwindet er bis der Verlauf fertig ist.
Was muss ich machen das der Button immer im Vordergrund bleibt?
Kann ich irgendwie mit AS denn Dokumentenhintergrund ansprechen und dort die Farbe ändern?
 
Zuletzt bearbeitet:
Hi,

Bei mir funktioniert diese Funktion. Vielleicht kannst Du Deine komplette Datei einmal posten?

Eine mögliche Fehlerquelle könnte sein, dass Dein Ziel-MC auf einer höheren Stufe als 100 liegt - dann könnte es schon ausreichen, den zweiten Parameter der duplicateMovieClip-Methode auf einen höhern Wert zu setzen:
Code:
duplicateMovieClip(target, "duplicate_mc", 1000);

Gruß
.
 
Ok...
Hab jetzt die Datei hochgeladen.

Bemerkung:
Wenn du es ausführst, siehst du, wie der Button in den Hintergrund verschwindet,
und wieder auftaucht.

Gruss
 

Anhänge

Hi,

das kommt daher, dass diese Funktion ein Duplikat des Zielclips auf Stufe 100 erzeugt. Objekte, die Du aber selbst auf die Bühne gezogen hast, bekommen automatisch negative Stufen zugeordnet - Deine Kopie wird also über dem Kreis angezeigt.

Ein Workaround wäre, den Kreis vorübergehend auf eine höhere Stufe zu setzen (z.B. 101) - dadurch bringst Du natürlich u.U. Deine gesamte Stapekreihenfolge durcheinander.

Es ist immer schwierig, Scripte zur allgemeinen Verwendung zu veröffentlichen, die auf absolute Stufenangaben angewiesen sind. In diesem Fall würde ich Dir eher die setTransform-Methode des Color-Objektes ans Herz legen, da sie ohne Duplikate auskommt:
Code:
function fadeTo(mc, r, g, b, s) {
    var cl = new Color(mc);
    var tr = cl.getTransform();
    mc.onEnterFrame = function() {
        tr.rb += (r - tr.rb) / s;
        tr.gb += (g - tr.gb) / s;
        tr.bb += (b - tr.bb) / s;
        cl.setTransform(tr);
        if (Math.ans(r - tr.rb) < 1) {
            tr.rb = r;
            tr.gb = g;
            tr.bb = b;
            cl.setTransform(tr);
            delete this.onEnterFrame;
        }
    }
}
(Beachte, dass "speed" hier nicht die wirkliche Geschwindigkeit ist, sondern ein Teiler: Je höher, desto langsamer, wobei die Transformation abgebremst stattfindet)

Aufruf z.B. mit:
Code:
fadeTo(mein_MC, 255, -255, -255, 10); // rot
(Die Werte für rot, grün und blau werden getrennt angegeben und gehen von -255 (Anteil ganz ausblenden) bis 255 (Anteil voll einblenden))

Gruß
.
 
Zurück