Zurück   Flashforum > Flash > ActionScript > ActionScript 2

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 14-10-2011, 14:12   #1 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Tweens laufen nicht vollständig durch

Hallo,

ich tweene mit dem caurina.transitions.Tweener eine ganze Batterie MCs über _alpha aus und ein. Am Ende von manchen solcher Tweens setzte ich bei onComplete ein removeMovieClip() ein. Dann erzeuge ich einen neuen MC mit dem gleichen Namen und anderem Inhalt.

Sporadisch tritt jetzt der Fehler auf, dass bei zwei MCs mit Textfeldern drin (Zufall?) der Tween nicht zu Ende läuft und bei _alpha:8.25.. oder 15.43.. stehen bleibt und dann natürlich nicht gelöscht wird. Der neue MC wird aber schon angelegt. Erzwingen kann man den, wenn man das, wenn solche Aktionen kurz nacheinander ausgeführt werden (Doppelklick).

ich habe mit dem Caurina-Tweener bisher gute Erfahrungen gemacht, weil ich meinte, dass sowas nicht auftritt.

Hat jemand eine Idee, woran sowas liegen kann? Irgendetwas bricht den Tween ab. Kann das eine andere Aktion sein? Ein removeMovieClip() vielleicht, während der Tween noch läuft?

Die Fehlersuche wird erschwert durch den Umstand, dass der Flash-Debugger mir in so einem Fall zwar den alten MC anzeigt, nicht aber den neuen (den gibts aber, schließlich sehe ich ihn ja).

Ach so, ich will nicht unbedingt das ganze Script hier reinladen, das hat 1146 Zeilen.
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens
wanst ist offline   Mit Zitat antworten
Alt 14-10-2011, 14:39   #2 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Zitat:
Zitat von wanst Beitrag anzeigen
Ach so, ich will nicht unbedingt das ganze Script hier reinladen, das hat 1146 Zeilen.
Die keinesfalls alle direkt mit dem Problem zu tun haben.
Ich war heute im Wahrsager- und Quaksalbereibedarf bei mir um die Ecke und da waren die Glaskugel aus. Kommen auch bis Ende des Jahres keine neuen rein.
Poste relevanten Code. Wenn der nicht reicht, wird dir das schon jemand sagen.

Interessant wäre zB wie du diese MCs entfernst, poste also mal den onComplete, den du da gebaut hast.

__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 14-10-2011, 17:51   #3 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Zitat:
Zitat von milchreis Beitrag anzeigen
Die keinesfalls alle direkt mit dem Problem zu tun haben.
Schon mal was von Murphy gehört?
Zitat:
Zitat von milchreis Beitrag anzeigen
Interessant wäre zB wie du diese MCs entfernst, poste also mal den onComplete, den du da gebaut hast.
Der ist harmlos und so kurz, da darfst du sogar die ganze Zeile haben
PHP-Code:
Tweener.addTween(aktuelleSeite[i], {_alpha:0time:1onComplete:function() {this.removeMovieClip();}}); 
Na gut, ich versuchs mal: vielleicht hängt es ja wie immer, wenn ich ihn benutze, mit dem setTimeout zusammen, also hier mal die Funktion, in der das meiste zu dem Thema passiert:
PHP-Code:
import caurina.transitions.Tweener;
//
// [...]
//
_global.bau_Seite = function (welche:String)
{
    
//
    // als Erstes Timer stoppen:
    
clearTimeout(_global.myInhTimer);
    
//
    // alte Inhalte ausblenden:
    
if (aktuelleSeite.headline
    {
        for (var 
i in aktuelleSeite)
        {
            if (
typeof(aktuelleSeite[i]) == "movieclip")
            {
                
Tweener.addTween(aktuelleSeite[i], {_alpha:0time:tweenKurzonComplete:function() {this.removeMovieClip();}});
            }
            
delete aktuelleSeite[i];
        }
        
Tweener.addTween(_root.subnav, {_alpha:0time:tweenKurzonComplete:function() {this.removeMovieClip();}});
        
_global.myInhTimer setTimeout (bau_Seite, (tweenKurz*1000+100), welche);
    }
    else 
    {
        
// --------- TEST -----------------------------------------------------
        // sicherheitshalber noch mal alles löschen, was hier nichts mehr verloren hat:
        
for (i in aktuelleSeite)
        {
            
aktuelleSeite[i].removeMovieClip();
            
delete aktuelleSeite[i];
        }
        
// --------------------------------------------------------------------
        //
        //  [...]
        //
        // Neue MCs anlegen in der Art:
        
aktuelleSeite.headline _root.attachMovie ('textfeld_headline''headline'_root.getNextHighestDepth(), {_x:inh_Headline_x_y:inh_Headline_y_alpha:0});
        
Tweener.addTween (aktuelleSeite.headline, {_alpha:100time:tweenKurz});
        
//
        // usw.
    
}

Alle Bestandteile einer »Seite« werden in dem globalen Objekt aktuelleSeite abgelegt.

Vielleicht muss ich den Namen noch die nextHighestDepth anhängen, damit sie eindeutig sind...
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens

Geändert von wanst (14-10-2011 um 21:23 Uhr)
wanst ist offline   Mit Zitat antworten
Alt 15-10-2011, 10:53   #4 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Zitat:
Zitat von wanst Beitrag anzeigen
Schon mal was von Murphy gehört?
Wer ein Marmeladenbrot fallen lässt, hat auch nichts anderes verdient, als sie auf der Marmeladenseite aufkommen zu sehen.

Zur Sache:
Sollte die Stulle doch nicht "falsch" aufgekommen sein, würde man sich vermutlich noch eine zweite schmieren und sie, um sie zB mit auf Arbeit zu nehmen, in eine Brotbüchse packen.

Warum macht man das? Weil's einfacher ist eine Büchse zu tragen als 2 Marmeladenbrote.

Und was machst du?
Du trägst deine Brote alle einzeln, das dabei was schief geht, ist abzusehen.

Deine tweens sind alle gleich, packe also alle MCs in einen Container (und nicht auf _root) und tweene diesen.

Warum rufst du clearTimeout auf? Kann deine Funktion auch anderweitig als von dem Timeout aufgerufen werden? ein Timeout musst du nicht zwangsläufig "löschen", da es ja nur 1 mal ausgeführt wird.

Was ist der Sinn des Parameters "welche:String"?
Ich denke du möchtest damit festlegen, welche neue Seite aufgebaut wird, aber du machst doch mit dem Parameter gar nix

Ansonsten:
_global und _root geht gar nicht.
Lass das lieber.

Du möchtest ja einen MovieClip ausblenden und einen neuen einblenden, also einen Übergang erzeugen.
Sowas lässt sich prima in eine eigene Klasse kapseln.

1146 Zeilen schreien nach refactoring.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick
milchreis ist offline   Mit Zitat antworten
Alt 15-10-2011, 21:38   #5 (permalink)
Webverwickler
 
Benutzerbild von wanst
 
Registriert seit: May 2005
Beiträge: 327
Seltsame Logik...

Hast du dir neben poetischen Spitzfindigkeiten und Kritik an meinem Code auch Gedanken zu dem Problem gemacht? Zur Erinnerung: Meine Frage war, was dazu führen kann, dass ein Tween vor Ende stoppt und woran ich noch nicht gedacht habe. Dann wüsste ich, wonach ich suchen muss.

Es gibt für alle deine Fragen Gründe. Aber das führt vom Kern des Problems weg.

Aber gut, such ich halt allein weiter. Ich war jetzt zwei Tage mit einem anderen Job beschäftigt und bin es noch, sonst hätte sich das Ganze vielleicht schon erledigt.

Nichtsdestotrotz danke für deine Zeit und Mühe.
__________________
Gruß
Wanst

Reden ist Silber, Schweigen ist Gold! ... Meistens
wanst ist offline   Mit Zitat antworten
Alt 15-10-2011, 22:30   #6 (permalink)
+ Zimt & Zucker
 
Registriert seit: Mar 2006
Ort: hinterm Mond gleich links
Beiträge: 2.040
Zitat:
Zitat von wanst Beitrag anzeigen
Aber das führt vom Kern des Problems weg.
Ich dachte Kern des Problems sind sich vereinzelnde MovieClips?
Wenn du diese in einem Container zusammenfasst, lässt sich die Sache doch wesentlich einfacher handhaben.

Nein, den genauen Grund für den Fehler habe ich nicht herausgesucht.
Es wird wohl an den verwobenen Strukturen liegen, da wird einmal eingeblendet, dann neu erstellt, zerstört etc. Du fragst zurecht ob du etwas übersehen hast.

Du kannst die einzelnen Funktionalitäten nicht getrennt testen, die Fehlersuche wird zum Albtraum (als ob sie mit As2 nicht schon schwer genug wäre)
Erstelle dir also die Funktionalität des Ein- und Ausblendens getrennt, wenn das funktioniert, kansnt du auf sie zurückgreifen, wenn du zu einer anderen Ansicht blenden möchtest. Der "Zusammenbau" der einzelnen Ansichten sollte wiederum für sich geschehen.

Statt dem delete würde ich lieber die elemente per splice() wirklich entfernen.
__________________
anbei Grüße vom milchreis: Viva la [Silb]
"Selbst wenn uns nur noch der Zynismus treibt, wir werden trotzdem einfach immer weiter gehen!"

[Von null auf Flash in einem Klick.] <<< klick

Geändert von milchreis (15-10-2011 um 23:02 Uhr)
milchreis 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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
einzelne Tweens rückwärts laufen lassen lycos Flash MX 2004 1 22-11-2005 19:16
Rückwarts durch MC laufen? Robse ActionScript 1 5 05-11-2004 01:10
Form-Tweens durch LoadMovie blockiert Ginchilla Flash MX 3 22-05-2004 12:46
Sequentiell durch ein XML laufen bokel Flash mit XML und Webservices 18 18-02-2004 22:19
txt durch textfeld laufen lassen Andrew Flash 4 und Flash 5 2 25-09-2001 08:31


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:41 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele