Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 04-10-2010, 18:01   #1 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 14
Question UnloadSWF Problem - Tween stoppt einfach

Hallo Forum,

ich habe ein seltsames Problem.

Ich lasse mit meinem Script Textboxen via Tween bewegen und habe einen Listener der auf MOTION_FINISH wartet, um dann die nächste Box loszuschicken.
Jetzt passiert es aber manchmal, dass die Box auf halber Strecke liegen bleibt.
Ich habe das Ganze mal mit dem Debugger abgespielt und es kommt vor, dass er, nachdem der Tween gestartet und bevor er beendet wurde, die Box stoppt und der Debugger folgendes ausgibt:

[UnloadSWF] D:\...\adv060.swf\[[DYNAMIC]]\1

(Er gibt natürlich statt "..." den Pfad an...)

Das Problem tritt nicht jedes Mal auf und auch nicht immer an der selben Stelle.

Was hat das zu bedeuten?
Und vorallem: Wie kann ich das beheben?

Ich bin für jeden Rat dankbar.
gruß mrnx

Geändert von mrnx (04-10-2010 um 18:04 Uhr)
mrnx ist offline   Mit Zitat antworten
Alt 04-10-2010, 20:09   #2 (permalink)
SGD-Flashboon
 
Registriert seit: Sep 2009
Beiträge: 449
versuch mal den tween zwischen try catch error, denn das scheint ein async prob.
xeed ist offline   Mit Zitat antworten
Alt 05-10-2010, 12:09   #3 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 14
Danke, xeed. Das hab ich zwar noch nie gemacht, aber ich werde es gleich mal versuchen.
Was bedeutet async prob? Ein asynchrones Problem oder ein Problem verursacht durch Asynchronität von irgendetwas?
mrnx ist offline   Mit Zitat antworten
Alt 05-10-2010, 13:45   #4 (permalink)
SGD-Flashboon
 
Registriert seit: Sep 2009
Beiträge: 449
liess dir dazu mal zb das hier durch

Understanding Try/Catch in ActionScript

synchrone errors, abzufangen zb per eventListener, sind zb frame.event errors, und asynchrone sind u.a. errors während der laufzeit von scripten.

so hab ichs zumindest verstanden, und konnte damit letztens mein memory game stabiler machen. das ist beim reinladen der bilder am anfang regelmäßig stehengeblieben, trotz das ich load.complete etc sauber verarbeitet hatte.
xeed ist offline   Mit Zitat antworten
Alt 05-10-2010, 16:30   #5 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 14
Hier mal der problematische Stück Code:
ActionScript:
  1. function boxesmove(firstMover:Number, lastMover:Number, where:Number, easing:Function, tweenspeed:Number):void {
  2.     var outputmovepos:Number = 0;
  3.     for (var i:Number = firstMover; i <= lastMover; i++) {
  4.         for (var j:Number = i; j < lastMover; j++) {
  5.             outputmovepos +=  this["output_txt" + j].height + 13;
  6.         }
  7.         outputmovepos = -1 * outputmovepos + where;
  8.         var myTween:Tween = new Tween(this["output_txt" + i],"y", easing,this["output_txt" + i].y,outputmovepos,tweenspeed,true);
  9.         boxpos[i] = outputmovepos;
  10.         outputmovepos = 0;
  11.     }
  12.     myTween.addEventListener(TweenEvent.MOTION_FINISH, tweenfinished);
  13.     Tfinished = false;
  14.     if (scrolling == false) copn++;
  15.     else {scrolling = false; outputpos = boxpos[lastBox]}
  16.     trace("boxmoveende");
  17. }
  18.  
  19. function tweenfinished(e:TweenEvent):void {
  20.     trace("tweenfinishstart");
  21.     //usw.
  22.  

Dass der Fehler nicht woanders herkommen kann, habe ich durch die Tracer rausbekommen, weil, wenn der Fehler auftritt, "tweenfinishstart" nicht mehr ausgetracet wird.

Mit try-catch komme ich nicht recht weiter. Egal, ob ich ihn um die beiden Funktionen oder in die Funktionen lege, er gibt nichts aus.
Also, weder
ActionScript:
  1. function boxesmove(firstMover:Number, lastMover:Number, where:Number, easing:Function, tweenspeed:Number):void {
  2.     try {
  3.         //code
  4.     }
  5.     catch (err:Error) {
  6.         trace("Fehler aufgetreten: " + err);
  7.     }
  8. }
  9.  
  10. function tweenfinished(e:TweenEvent):void {
  11.     try {
  12.         //code
  13.     }
  14.     catch (err:Error) {
  15.         trace("Fehler aufgetreten: " + err);
  16.     }
  17. }

noch

ActionScript:
  1. try {
  2. function boxesmove(firstMover:Number, lastMover:Number, where:Number, easing:Function, tweenspeed:Number):void {
  3.     //code
  4. }
  5.  
  6. function tweenfinished(e:TweenEvent):void {
  7.     //code
  8. }
  9. }
  10. catch (err:Error) {
  11.     trace("Fehler aufgetreten: " + err);
  12. }

bringt mir eine Fehlernachricht.

mrnx ist offline   Mit Zitat antworten
Alt 05-10-2010, 18:31   #6 (permalink)
SGD-Flashboon
 
Registriert seit: Sep 2009
Beiträge: 449
versuchs mal so:

ActionScript:
  1. function boxesmove(firstMover:Number, lastMover:Number, where:Number, easing:Function, tweenspeed:Number):void {
  2. try{   
  3. var outputmovepos:Number = 0;
  4.     for (var i:Number = firstMover; i <= lastMover; i++) {
  5.         for (var j:Number = i; j < lastMover; j++) {
  6.             outputmovepos +=  this["output_txt" + j].height + 13;
  7.         }
  8.         outputmovepos = -1 * outputmovepos + where;
  9.         var myTween:Tween = new Tween(this["output_txt" + i],"y", easing,this["output_txt" + i].y,outputmovepos,tweenspeed,true);
  10.         boxpos[i] = outputmovepos;
  11.         outputmovepos = 0;
  12.     }
  13.     myTween.addEventListener(TweenEvent.MOTION_FINISH, tweenfinished);
  14. } catch (error:Error) {
  15. trace("error: " +error);
  16. } finally {
  17.     Tfinished = false;
  18.     if (scrolling == false) copn++;
  19.     else {scrolling = false; outputpos = boxpos[lastBox]}
  20.     trace("boxmoveende");
  21. }
  22. }
  23.  
  24. function tweenfinished(e:TweenEvent):void {
  25.     trace("tweenfinishstart");
  26.     //usw.
  27. }


ansonsten hätte ich noch ne andere idee, denn du setzt ja die variable Tfinished= false nachdem das event schon beendet sein könnte.

ich seh auch grad du überschreibst in deiner schleife die variable myTween immer wieder, während das event noch stattfindet. das kann natürlich nicht funktionieren, denn so haut der dir immer wieder neue tweens mit gleichem namen in die klasse.

du musst während der schleife jeden tween einen eigenen namen geben, zb mit nem array. dannach fragst du nur für den zuletzt erstellten tween per eventListener finish ab, und kannst für alle den listener in einer schleife wieder removen.

Geändert von xeed (05-10-2010 um 18:53 Uhr)
xeed ist offline   Mit Zitat antworten
Alt 05-10-2010, 20:25   #7 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 14
Ich überschreibe zwar die Variable - das könnte man ändern - aber nicht bevor der Tween nicht zuende ist. Deswegen ja tweenfinished.

Aber ich werde mal deine try-catch Methode ausprobieren.

//edit:
Deine try-catch Methode bringt mir auch keine Fehlernachricht.
Tfinished=false an den Anfang der Funktion zu setzen - also bevor der Tween überhaupt fertig sein kann - behebt das Problem auch nicht.

Mein Code sieht jetzt so aus:
ActionScript:
  1. function boxesmove(firstMover:Number, lastMover:Number, where:Number, easing:Function, tweenspeed:Number):void {
  2.     try {
  3.     trace("TWEEN " + copn + " " + opn);
  4.     Tfinished = false;
  5.     var outputmovepos:Number = 0;
  6.     for (var i:Number = firstMover; i <= lastMover; i++) {
  7.         for (var j:Number = i; j < lastMover; j++) {
  8.             outputmovepos +=  this["output_txt" + j].height + 13;
  9.         }
  10.         outputmovepos = -1 * outputmovepos + where;
  11.         myTween = new Tween(this["output_txt" + i],"y", easing,this["output_txt" + i].y,outputmovepos,tweenspeed,true);
  12.         boxpos[i] = outputmovepos;
  13.         outputmovepos = 0;
  14.     }
  15.     myTween.addEventListener(TweenEvent.MOTION_FINISH, tweenfinished);
  16.     } catch (error:Error) {
  17.         trace("error:"+error);
  18.     } finally {
  19.     if (scrolling == false) copn++;
  20.     else {scrolling = false; outputpos = boxpos[lastBox]}
  21.     trace("boxmoveende");
  22.     }
  23. }
  24.  
  25. function tweenfinished(e:TweenEvent):void {
  26.     trace("tweenfinishstart");

Ich merke also, falls ein Tween losgeschickt wird, bevor der vorherige beendet wurde.

//edit2: Interessanterweise kann ich den Fehler nicht mehr provozieren. Ich habe einfach nur den Code von oben genommen und versucht einen Fehler zu provozieren (nach der 15. bewegten Box hat er meistens gestoppt) und meine Tracer zu beobachten, ABER:
Aus irgendeinem Grund (es ist ja einfach nur ein Tracer mehr drin), gibt er zwar immer noch das UnloadSWF usw aus, stoppt den Tween aber nicht mehr.

Keine Ahnung was das soll, aber jetzt läufts ja. Danke ^^

Geändert von mrnx (05-10-2010 um 20:47 Uhr)
mrnx ist offline   Mit Zitat antworten
Alt 06-10-2010, 00:06   #8 (permalink)
SGD-Flashboon
 
Registriert seit: Sep 2009
Beiträge: 449
die for schleife wird in deinem script, unabhängig davon ob der tween beendet ist, hochgezählt, und somit auch die myTween's erstellt. vielleicht ist das auch gewollt, ich weiss ja nicht was in tweenfinished gemacht wird.

aber wenn nicht, könntest du das problem mit einer while schleife lösen, die j erst hochzählt, wenn TFinished wieder true ist.

gruss
xeed ist offline   Mit Zitat antworten
Alt 06-10-2010, 13:47   #9 (permalink)
Neuer User
 
Registriert seit: Aug 2010
Beiträge: 14
Möglicherweise hast doch nicht ganz unrecht. Es werden manchmal mehrere Boxen zur selben Zeit bewegt. Ich gebe zu, so noch nicht über die Problematik des mehrfach belegten myTweens nachgedacht zu haben.

Jetzt hat jeder der Tweens einen eigenen Namen und obwohl ich die problemlösenden Tracer rausgeschmissen habe, läuft es fehlerfrei. Vielleicht lags ja doch daran.

Danke.

Geändert von mrnx (06-10-2010 um 14:48 Uhr)
mrnx ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
stop, swf, tween, unload

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
Ich glaube diesen Problem kennen viele:-( Performance Problem Animator Flash MX 8 11-01-2011 17:07
Scrolling Problem ( removeChild & addChild Problem ) Jakozk ActionScript 3 2 28-02-2010 19:12
Antialiasing of Systemfonts problem (problem with Bitmapdata.draw()) genesys ActionScript 3 1 17-11-2009 12:52
onRollOver-Problem, oder auch gotoAndPlay - kleines Problem für geübten Skripter Ladina Flash Einsteiger 2 04-05-2007 11:09
loadmovie problem und schleifen problem mit variable Bourne ActionScript 1 8 13-09-2004 00:32


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

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


Copyright ©1999 – 2012 Marc Thiele