Zurück   Flashforum > Flash > Stuff

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-08-2004, 03:03   #1 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.369
[Stuff] einfaden und ausfaden von mc´s

hi ho... actionscript 2 user und leute ab flashmx2004 sollten auch mal hier reinschauen:
[Stuff] einfaden und ausfaden von mc´s

cya, sal

hi, die aktuelleren prototypes gibts weiter hinten!
[Stuff] einfaden und ausfaden von mc´s
am besten folgende links beachten:
[Stuff] einfaden und ausfaden von mc´s

cya, sal

hola, da ich in letzter zeit so häufig über die frage einfaden und ausfaden gestolpert bin habe ich mir gedacht ich fasse das mal zusammen...

cya, sal

der thread von racoon99 der mich dazu angeregt hat..
http://www.flashforum.de/forum/showt...47#post1006847

kurz und knapp worum es geht. ich habe einen prototype geschrieben, welcher deine mc´s ein und ausfaden kann. dabei hab ich mal zwei verschiedene varianten geschrieben. einmal per setInterval und dann noch mit einer onEnterFrame schleife.

VARIANTE 1
PHP-Code:
stop();//das komplette as ins erste frame auf die hauptzeitleiste

MovieClip.prototype.fadinout = function(inoroutfadetospeedstepsbremsspeed) {//erklärung was was ist folgt unten beim function aufruf
    
clearInterval(mc.fadinoutInt);//falls das interval noch läuft wird es zu begin beendet
    
var mc this//var mc ist jetzt der zu fadende movieclip(mc) also this
    
var 0//i wird zu begin immer auf 0 gesetzt und ist später für das abbremsem zuständig
    
if(inorout){//wenn inorout true, bzw = 1 ist dann wird ausgefadet
        
mc.fadinoutInt setInterval(function () {//das interval, sprich das alphern beginnt
            
i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
            
mc._alpha -= (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha veringert werden soll. i ist zuständig fürs abbremsen.
            
if (mc._alpha <= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist 
                
clearInterval(mc.fadinoutInt);//das alphern wird gestoppt, indem das interval beendet wird
                
mc._alpha fadeto//sichert das der mc auch wirklich exakt den wert von fadeto erhält
            
}                                      
        }, 
speed);//die geschwindikeit des faden (also die geschw. in der das interval läuft)
    
}else if(!inorout){//wenn inorout false, bzw = 0 ist dann wird eingefadet
        
mc.fadinoutInt setInterval(function () {//das interval, sprich das alphern beginnt
           
i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
            
mc._alpha += (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha erhört werden soll. i ist zuständig fürs abbremsen.
            
if (mc._alpha >= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist 
                
clearInterval(mc.fadinoutInt);//das alphern wird gestoppt, indem das interval beendet wird
                
mc._alpha fadeto//sichert das der mc auch wirklich exakt den wert von fadeto erhält
            
}                                      
        }, 
speed);//die geschwindikeit des faden (also die geschw. in der das interval läuft)
    



//rufe es z.B. so auf
//deinMc ist ein movieclip auf der hauptzeitleiste mit dem instanznamen deinMc. in diesem fall würdeste das as mit ins frame wie die prototype zuvor auch reinpacken.
deinMc.onRelease = function(){ 
    
this.fadinout(1,12,50,2,1);//this.fadinout(0 oder false für einfaden und 1 oder true für ausfaden, hier den wert eintragen bis zu welchem wert gefadet werden soll, die geschwindigeit mit der gefadet wird, die schritte die festelegen um welchen wert alpha jeweils erhöht wird, der wert der festlegt wie stark der fade abgebremst werden soll);

und
VARIANTE 2
PHP-Code:
stop();//das komplette as ins erste frame auf die hauptzeitleiste

MovieClip.prototype.fadinout = function(inoroutfadetospeedstepsbremsspeed) {//erklärung was was ist folgt unten beim function aufruf
    
delete mc.onEnterFrame//falls die schleife noch läuft wird sie zu begin beendet
    
var mc this//var mc ist jetzt der zu fadende movieclip(mc) also this
    
var 0//i wird zu begin immer auf 0 gesetzt und ist später für das abbremsem zuständig
    
if(inorout){//wenn inorout true, bzw = 1 ist dann wird ausgefadet
        
mc.onEnterFrame = function() {//die onEnterFrame schleife beginnt
            
i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
            
mc._alpha -= (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha veringert werden soll. i ist zuständig fürs abbremsen.
            
if (mc._alpha <= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist 
                
delete mc.onEnterFrame//das alphern wird gestoppt, indem die schleife beendet wird
                
mc._alpha fadeto//sichert das der mc auch wirklich exakt den wert von fadeto erhält
            
}                                      
        };
    }else if(!
inorout){//wenn inorout false, bzw = 0 ist dann wird eingefadet
        
mc.onEnterFrame = function() {//die onEnterFrame schleife beginnt
           
i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
            
mc._alpha += (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha erhört werden soll. i ist zuständig fürs abbremsen.
            
if (mc._alpha >= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist 
                
delete mc.onEnterFrame//das alphern wird gestoppt, indem die schleife beendet wird
                
mc._alpha fadeto//sichert das der mc auch wirklich exakt den wert von fadeto erhält
            
}                                      
        };
    } 


//rufe es z.B. so auf
//deinMc ist ein movieclip auf der hauptzeitleiste mit dem instanznamen deinMc. in diesem fall würdeste das as mit ins frame wie die prototype zuvor auch reinpacken.
deinMc.onRelease = function(){ 
    
this.fadinout(1,12,50,2,1);//this.fadinout(0 oder false für einfaden und 1 oder true für ausfaden, hier den wert eintragen bis zu welchem wert gefadet werden soll, die geschwindigeit mit der gefadet wird, die schritte die festelegen um welchen wert alpha jeweils erhöht wird, der wert der festlegt wie stark der fade abgebremst werden soll);

__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (13-06-2006 um 16:08 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 14-08-2004, 03:12   #2 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.369
anbei auch noch die zwei entsprechenden fla´s, bzw zip´s. ich hoffe es ist einigermaßen verständlich. habe jede as zeile kommentiert. falls es fragen ,ideen, kritik, oder verbesserungen usw gibt immer her damit...

nochmal kurz zur erklärung. deinMc ist in meinem beispiel gleichzeitig der auslöser button und der zu fadende movieclip. welche variante besser oder schlechter ist habe ich für mich noch nicht endgültig entschieden...

also, viel spaß damit

cya, sal

ps
die beigefügten flas weichen minimal von denen im thread geposteten as schnipseln ab... funktionieren tuen sie auch so, zum erneurn einfach das as ersetzen
Angehängte Dateien
Dateityp: zip fadeinout_interval.zip (3,5 KB, 2515x aufgerufen)
Dateityp: zip fadeinout_onenterframe.zip (3,7 KB, 2061x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.

Geändert von salazar (14-08-2004 um 03:38 Uhr)
salazar ist offline   Mit Zitat antworten
Alt 14-08-2004, 07:15   #3 (permalink)
_//\\#//\\_
 
Benutzerbild von warrantmaster
 
Registriert seit: Jan 2003
Beiträge: 7.060
@sal

...4:12 uhr...

um die zeit baut der kerl stuff für die meute,
nice !
warrantmaster ist offline   Mit Zitat antworten
Alt 14-08-2004, 19:42   #4 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
jo!

endlich nen ordentlichen tread auf den man verweisen kann!

sonst habe ich im moment immer auf den anderen tread mit den 5 vers. möglichkeiten von dir verwiesen

jetzt gibt es das ganze auch erklärt!
pape ist offline   Mit Zitat antworten
Alt 16-08-2004, 01:00   #5 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
hab das grade noch mal nen bisl durchgelesen, als ich für jemanden noch ne loadmovie function mit in den proto gesetzt habe (dass es wie ne tür funzt...-> ausfaden.. neuladen...einfaden (s.u.)
...


aber zur eigentlichen sache:
man kann sich den ersten parameter auch sparen und die
beiden if abfragen ob ein oder ausgefadet werden soll so machen:
ActionScript:
  1. //...
  2.     if(fadeto<mc._alpha){//ausfaden, wenn der aktuelle alpha wert größer ist als der wohin er soll
  3. //...
  4.     }else if(fadeto>mc._alpha){//ausfaden, wenn der aktuelle alpha wert kleiner ist als der wohin er soll
  5. //...
  6.  
so sähe es dann komplett und mit aufruf aus:
ActionScript:
  1. stop();//das komplette as ins erste frame auf die hauptzeitleiste
  2.  
  3. MovieClip.prototype.fadinout = function(fadeto, speed, steps, bremsspeed) {//erklärung was was ist folgt unten beim function aufruf
  4.     var mc = this; //var mc ist jetzt der zu fadende movieclip(mc) also this
  5.     var i = 0; //i wird zu begin immer auf 0 gesetzt und ist später für das abbremsem zuständig
  6.     if(fadeto<mc._alpha){//ausfaden, wenn der aktuelle alpha wert größer ist als der wohin er soll
  7.         mc.onEnterFrame = function() {//die onEnterFrame schleife beginnt
  8.             i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
  9.             mc._alpha -= (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha veringert werden soll. i ist zuständig fürs abbremsen.
  10.             if (mc._alpha <= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist
  11.                 delete this.onEnterFrame; //das alphern wird gestoppt, indem die schleife beendet wird
  12.                 mc._alpha = fadeto; //sichert das der mc auch wirklich exakt den wert von fadeto erhält
  13.             }                                     
  14.         };
  15.     }else if(fadeto>mc._alpha){//ausfaden, wenn der aktuelle alpha wert kleiner ist als der wohin er soll
  16.         mc.onEnterFrame = function() {//die onEnterFrame schleife beginnt
  17.            i+=bremsspeed;//i wird jedesmal um den wert bremsspeed erhöht. addiert
  18.             mc._alpha += (steps*i);//der mc bekommt seine neuen alpha werte. steps ist der wert in welchen schritten alpha erhört werden soll. i ist zuständig fürs abbremsen.
  19.             if (mc._alpha >= fadeto) {//wenn der wert wie weit ge-alphert werden soll erreicht bzw überschritten ist
  20.                 delete this.onEnterFrame; //das alphern wird gestoppt, indem die schleife beendet wird
  21.                 mc._alpha = fadeto; //sichert das der mc auch wirklich exakt den wert von fadeto erhält
  22.             }                                     
  23.         };
  24.     }
  25. }
  26.  
  27. //rufe z.B. es so auf
  28. //deinMc ist ein movieclip auf der hauptzeitleiste mit dem instanznamen deinMc. in diesem fall würdeste das as mit ins frame wie die prototype zuvor auch reinpacken.
  29. deinMc.onRelease = function(){
  30.     this.fadinout(12,50,2,1);//this.fadinout(hier den wert eintragen bis zu welchem wert gefadet werden soll, die geschwindigeit mit der gefadet wird, die schritte die festelegen um welchen wert alpha jeweils erhöht wird, der wert der festlegt wie stark der fade abgebremst werden soll);
  31. }

und das mit dem loadmovie, falls es jemanden interessiert habe ich so gelöst:
ActionScript:
  1. stop();
  2.  
  3. MovieClip.prototype.fadinout = function(inorout, fadeto, speed, steps, bremsspeed, toload, laodtarget) {
  4.     var mc = this;
  5.     var i = 0;
  6.     if(fadeto<mc._alpha){
  7.         mc.onEnterFrame = function() {
  8.             i+=bremsspeed;
  9.             mc._alpha -= (steps*i);
  10.             if (mc._alpha <= fadeto) {
  11.                 loadtarget.unloadMovie(); //hier ziel entladen
  12.                 laodtarget.loadMovie(toload); //hier ziel mit der im parameter übergebnenen url beladen
  13.                 mc.fadinout(1, 100, 50, 2, 1); //und hier wieder einfaden
  14.                 delete this.onEnterFrame;
  15.                 mc._alpha = fadeto;
  16.             }                                       
  17.         };
  18.     }else if(fadeto>mc._alpha){
  19.         mc.onEnterFrame = function() {
  20.            i+=bremsspeed;
  21.             mc._alpha += (steps*i);
  22.             if (mc._alpha >= fadeto) {
  23.                 delete this.onEnterFrame;
  24.                 mc._alpha = fadeto;
  25.             }                                       
  26.         };
  27.     }
  28. }
  29.  
  30. // beispiel aufruf:
  31. deinMc.onRelease = function(){
  32.     this.fadinout(12,50,2,1,"home.swf",mc_holder);
  33.     //5.parameter gibt die url der zuladenen swf nach dem ausfaden an (z.b.: "home.swf") und
  34.     //6.parameter gibt das ziel an wohin die swfgeladen werden soll (z.b.: mc_holder)
  35. }
(das ist aber nicht getested...)

grz
Robert
pape ist offline   Mit Zitat antworten
Alt 17-08-2004, 13:00   #6 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 5
Question

Tach zusammen,
ich bein ein absoluter Newbie was Flash anbelangt, und habe nun mal das Tutorial von salazar ausprobiert. Soweit läuft auch alles tiptop. Nur, was ich nicht kapier ist, wieso nix mehr läuft, wenn ich vor der Zuweisung

PHP-Code:
deinMc.onRelease = function(){ 
    
this.fadinout(1,12,50,2,1);
    } 
testweise ein Bild in den MovieClip mittels LoadMovie lade.
Das Bild wird dann zwar geladen, aber ich kann nicht mehr auf den MovieClip klicken..... Wenn ich innerhalb der onRelease-Function das Bilde lade funzt es...
Woran liegt das?
lupo_84 ist offline   Mit Zitat antworten
Alt 17-08-2004, 14:30   #7 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
die aktionen des mcs werden überschrieben/ersetzt, beim neuladen eines externen swfs in einen container!
pape ist offline   Mit Zitat antworten
Alt 17-08-2004, 15:40   #8 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 5
Zitat:
Zitat von pape
die aktionen des mcs werden überschrieben/ersetzt, beim neuladen eines externen swfs in einen container!

Hmm..... aber ich lade das Bild ja in den Container, befor ich dem MC mitteile, was es beim onRelease-Ereignis machen soll? Dann sollte ja nix überschrieben werden?
lupo_84 ist offline   Mit Zitat antworten
Alt 18-08-2004, 00:00   #9 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
zeig mal deinen ganzen code... oder die fla...verstehe scheinbar nicht so ganz was du meinst...
pape ist offline   Mit Zitat antworten
Alt 18-08-2004, 07:29   #10 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 5
Ich habe einfach dieses File heruntergeladen, und dann im Code der Ebene 1:1 folgende Zeile oberhalb des Kommentars '//rufe es so auf' hinzugefügt: "deinMc.loadMovie("test.jpg");"
Ansonsten habe ich nix geändert.
Wie gesagt, wird dann das so das Bild test.jpg in das MC deinMC geladen, allerdings kann man es nicht mehr anklicken.
lupo_84 ist offline   Mit Zitat antworten
Alt 18-08-2004, 09:57   #11 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
hi!

du musst auch noch zunächst warten bis dein Bild ganz geladen wurde bevor du ihm ein onRelease ereignis zuweisen kannst!

machste z.b. über nen watcher mc:
ActionScript:
  1. deinMc.loadMovie("test.jpg");
  2.  
  3. this.createEmptyMovieClip("w",542);
  4. w.onEnterFrame = function () {
  5.     if (deinMc._width > 0) {
  6.         delete this.onEnterFrame;
  7.         deinMc.onRelease = function(){
  8.             this.fadinout(12,50,2,1);
  9.         }
  10.         this.removeMovieClip();
  11.     }
  12. }
"deinMc" sollte ein leerer Mc sein!

Geändert von pape (18-08-2004 um 10:00 Uhr)
pape ist offline   Mit Zitat antworten
Alt 18-08-2004, 10:46   #12 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 5
axo,
dann wurde demfall die Zuweisung des onRelease-Ereignises tatsächlich überschrieben. Es wird zwar nach dem LoadMovie-Aufruf festgelegt, aber die Ereignis-Zuweisung ist schneller, als dass das Bild geladen wurde, und so wird dann wohl die Zuweisung wieder zurückgesetzt... Jetzt kapier ich's!

Besten Dank!

Gleich noch ne andere Frage. Du hast geschrieben, dass das MC leer sein sollte.
Das ist aber nur nötig, damit dein Wachter funktioniert, oder? (Weil ja sonst die Breite schon zu beginn an grösser als 0 ist?!) Aber ansonsten darf man schon ohne schlechtes Gewissen in einem MC mit einem bestehenden Bild drin, ein anderes Bild laden? Oder ist das irgendwie unsaubere Flash-Programmierung?

Und noch was anderes: das Ereignis 'onEnterFrame', wann wird das genau ausgeführt?

Vielen Dank für deine Antworten
Gruss
Lupo

Geändert von lupo_84 (18-08-2004 um 10:52 Uhr)
lupo_84 ist offline   Mit Zitat antworten
Alt 18-08-2004, 11:45   #13 (permalink)
-
 
Benutzerbild von pape
 
Registriert seit: Jan 2004
Beiträge: 3.002
jo! ist nur wegen dem watcher mit dem leeren mc.. ich würde das bild wahrscheinlich eh in einen per as erstellten (leeren) mc laden...aber das macht jeder wie er will

das onEnterFrame wird einmal pro Frame aufgerufen

sobald es gesetzt wird wird es so lange in einer schleife ausgeführt bis es wieder mit delete enfernt wird.
wie oft/schnell es ausgeführt wird bestimmst du sozusagen mit den bps (bilder pro sekunde) bzw fps (frames per second) des Movies.
und wie gesagt wird es halt einmal pro frame aufruf ausgeführt!

ums nen bisl zu veranschaulichen (.. ich hab das früher nämlich auch nie gerafft...) setz einfach mal die bps auf 1 und lass dir einfach "hallo" oder so tracen!

du siehst dass es 1/sec ausgegeben wird...jetzt setz die bps mal nen bisl höher... und noch höher..usw...
und da wo jetzt getraced wird, ständen dann normaler weise eine reihe aktionen die so oft/schnell wie das tracen grade ausgeführt werden(also das komplette script was im oEF(onEnterFrame) steht und nicht nur immer eine zeile dieses scripts)!

Gruß
pape

Geändert von pape (18-08-2004 um 11:46 Uhr)
pape ist offline   Mit Zitat antworten
Alt 18-08-2004, 12:09   #14 (permalink)
Neuer User
 
Registriert seit: Aug 2004
Beiträge: 5
@pape
Besten Dank für deine ausführliche Erklärung!
Habe das ganze mal mit trace ausprobiert, und es ist wirklich so, wie du schreibst.

Ich finde zwar das ganze ein bisschen verwirrend. Weil die Frames sind ja die einzelnen "Quadrätchen" in der Zeitleiste. Ein Quadrätchen steht für ein Frame, wenn ich mich nicht irre. Wenn mein Film nun z.B. 10 Frames lang ist, dann dachte ich, würde das onEnterFrame-Ereignis 10x aufgerufen werden.
Und wenn ich nun die BpS auf 10 Setzte, so ist die ganze Sache bereits nach einer Sekunde durch, bei 1 logischerweise nach 10 Sekunden.

Aber aller Anschein nach hat dieses onEnterFrame-Ereignis nix mit den Frames in der Zeitleiste zu tun, sondern es lässt sich wohl eher mit einem Timer vergleichen, dessen Interval über die Framerate eingestellt wird... und der auch weiter läuft, obwohl der Hauptfilm bereits gestopt ist.
lupo_84 ist offline   Mit Zitat antworten
Alt 25-11-2004, 00:55   #15 (permalink)
experience++;
 
Benutzerbild von salazar
 
Registriert seit: Jul 2002
Ort: Düsseldorf
Beiträge: 11.369
Post

nochmal ne optimierte version mit der ich auch arbeite:
PHP-Code:
MovieClip.prototype.fadinout = function(iofastbr) {
    var 
mc this;
    var 
0;
    
delete mc.onEnterFrame;
    if(
io){
        
mc.onEnterFrame = function(){
            
i+=br
            mc
._alpha-=(st*i);
            if (
mc._alpha<=fa){
                
delete mc.onEnterFrame;
                
mc._alpha=fa;
            }                                      
        };
    }else if(!
io){
        
mc.onEnterFrame=function(){
           
i+=br;
            
mc._alpha+=(st*i);
            if (
mc._alpha>=fa){
                
delete mc.onEnterFrame;
            }                                      
        };
    } 


deinMc.onRelease = function(){ 
    
this.fadinout(1,12,2,1);//this.fadinout(0 oder false für einfaden und 1 oder true für ausfaden, hier den wert eintragen bis zu welchem wert gefadet werden soll, die schritte die festelegen um welchen wert alpha jeweils erhöht wird, der wert der festlegt wie stark der fade abgebremst werden soll);

zip mit dateien anbei

cya, sal
Angehängte Dateien
Dateityp: zip fadeinout_onenterframe_xp.zip (3,1 KB, 1433x aufgerufen)
__________________
Bitte keine Flashfragen an mich schicken. Dafür ist ja das Forum da! Das betrifft auch Profilnachrichten.
salazar ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind an
Pingbacks sind an
Refbacks sind an



Alle Zeitangaben in WEZ +1. Es ist jetzt 19:23 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele