Zurück   Flashforum > Flash > ActionScript > ActionScript 3

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 11-06-2009, 21:01   #1 (permalink)
asFlasher
 
Benutzerbild von ksw24
 
Registriert seit: Jul 2006
Beiträge: 1.136
Flash.Tween :: performance

Hallo Ihr Lieben...

ich hätt da ma eine Frage. Ich habe eine Dia-Show deren Bilder-Pfade per XML eingelesen werden. Nacheinander wird dann Bild für Bild eingetweened. Um nicht zu viele Objekte auf der Stage zu haben, entferne ich die Bilder nach dem ausfaden wieder. Trotzdem kommt es nach einer bestimmten Zeit dazu, dass die Tween anfängt ganz übel zu ruckeln. Vorher läuft sie wunderbar flüssig, doch wie gesagt...dann nicht mehr

Wisst ihr vielleicht woran das liegen könnte, evtl. ist das script ja Fehlerhaft, doch habe ich es soweit getestet, dass das Object eigntl. tatsächlich gelöscht sein müsste.

ActionScript:
  1. import fl.transitions.*;
  2. import fl.transitions.easing.*;
  3.  
  4. var pica:Loader;
  5. var pic_mc:Bitmap;
  6. var picFade:Tween;
  7. var pic_arr = [];
  8.  
  9. //Bild-Lade-Funktion
  10. function picLoad(url:String):void{
  11.     pica = new Loader();
  12.     pica.load(new URLRequest(url));
  13.     pica.contentLoaderInfo.addEventListener(Event.COMPLETE, picComplete);
  14. }
  15.  
  16. //Wenn das Bild geladen wurde, dann...
  17. function picComplete(e:Event):void{ 
  18.     //...lege es in den MC
  19.     pic_mc = e.target.content as Bitmap;
  20.     addChild(pic_mc);
  21.    
  22.     //speichere den namen im array...zum besseren entfernen später
  23.     pic_arr.push(getChildByName(pic_mc.name));
  24.    
  25.     //einfaden (2sek Tween)
  26.     picFade = new Tween(pic_mc, "alpha", Regular.easeOut, 0, 1, 2, true);
  27.    
  28.     //falls schon bilder geladen wurden, dann entferne diese, nach dem einfaden
  29.     if(pic_arr.length >= 2){
  30.         picFade.addEventListener(TweenEvent.MOTION_FINISH, outFaded);
  31.     }
  32. }
  33.  
  34. //nach dem einfaden, dann...
  35. function outFaded(e:Event):void{
  36.     //check jedes object im array...
  37.     for(var i:int=0; i<pic_arr.length-1; i++){
  38.         //...und entferne es
  39.         removeChildAt(getChildIndex(pic_arr[i]));
  40.     }
  41.     //den listener entfernen
  42.     picFade.removeEventListener(TweenEvent.MOTION_FINISH, outFaded);
  43. }
  44.  
  45. //per timer() wird dann alle 7sek ein neues bild geladen
  46. picLoad('bild_1.jpg'); // bild_2, bild_3, usw.
  47.  

Oder habt ihr generell einen besseren Weg, wo solche Probleme nicht auftreten?

Liebe Grüße & vielen Dank auf jeden Fall

ksw24

Geändert von ksw24 (12-06-2009 um 00:21 Uhr)
ksw24 ist offline   Mit Zitat antworten
Alt 11-06-2009, 23:55   #2 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.495
wenn mehrere bilder gleichzeitig auf der bühne sind, greifen doch auch mehrere auf picFade zu und erstellen bspw. einen neuen Tween, auch wenn picFade noch läuft.
dann ist doch picFade nicht mehr picFade, wenn er den eventListener entfernt und folglich wird der eventListener vom neusten picFade entfernt und anschließend die funktion gar nicht mehr aufgerufen. Was wiederum dazu führen würde, dass weder der eventListener entfernt wird (also auch der tween noch irgendwo rumhängt), noch das bild entfernt wird, oder seh ich das falsch?

ändert sich was, wenn du statt picFade.removeEven.... e.currentTarget verwendest?

mfg
sx

außerdem seh ich gerade:
function outFaded(e:TweenEvent)

Geändert von shin10 (12-06-2009 um 00:10 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 12-06-2009, 00:09   #3 (permalink)
asFlasher
 
Benutzerbild von ksw24
 
Registriert seit: Jul 2006
Beiträge: 1.136
Hallo,

und vielen Dank für deine Antwort.

Zitat:
ändert sich was, wenn du statt picFade.removeEven.... e.currentTarget verwendest?
Das lasse ich gerade mal durchlaufen...mal schaun ob er wieder anfängt mit stocken.

Zitat:
oder seh ich das falsch?
Theoretisch stimmt das was du sagst, doch in dieser konkreten Anwendung dauert die Tween ja nur 2sek und ein Bild wird erst nach 7sek gewechselt. Das heißt, es gibt zwar mehrere picFade, doch werden diese erst "neu angelegt", wenn der vorherige schon zu ende ist.

Eine gute Idee ist es natürlich nicht nur die Bilder in ein Array zu speichern und zu entfernen, sondern mit picFade genau so zu verfahren...aber Tweens sind doch gar keine displayObjects...wie kann ich diese denn tatsächlich löschen?

Gruß ksw24

edit: danke, habe nun TweenEvent und currentTarget zu stehen...durchlauf läuft noch...

Geändert von ksw24 (12-06-2009 um 00:11 Uhr)
ksw24 ist offline   Mit Zitat antworten
Alt 12-06-2009, 00:14   #4 (permalink)
asFlasher
 
Benutzerbild von ksw24
 
Registriert seit: Jul 2006
Beiträge: 1.136
Hallo,

hmm schade hat leider nix geholfen

Gruß ksw24

edit: konkret habe ich hier 4 Bilder, die nach dem 5ten Durchlauf anfangen mit dem stocken...irgendwo ist da noch der Wurm drinne

Geändert von ksw24 (12-06-2009 um 00:20 Uhr)
ksw24 ist offline   Mit Zitat antworten
Alt 12-06-2009, 00:25   #5 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.495
hmm, vielleicht liegts dann daran, dass du die bilder in deinem array anhäufst?
wirf mal den array komplett raus und entferne die bilder statt mit der schleife mit
PHP-Code:
removeChild(e.currentTarget.obj); 

Geändert von shin10 (12-06-2009 um 00:28 Uhr)
shin10 ist offline   Mit Zitat antworten
Alt 12-06-2009, 00:56   #6 (permalink)
asFlasher
 
Benutzerbild von ksw24
 
Registriert seit: Jul 2006
Beiträge: 1.136
Hallo,

das ist natürlich ne gute Idee...gefällt mir schon viel besser. Jedoch habe ich nun das Problem, dass ja direkt nach dem einfaden das Object wieder entfernt wird...es soll ja das vorletzte Object entfernt werden. Hast du da vielleicht noch eine Idee für ??

Gruß ksw24
ksw24 ist offline   Mit Zitat antworten
Alt 12-06-2009, 01:36   #7 (permalink)
in the boondocks
 
Benutzerbild von shin10
 
Registriert seit: Feb 2006
Ort: Augsburg
Beiträge: 3.495
dann müsste man wohl einfach immer nur das erste element aus dem array entfernen

PHP-Code:
try{
    
removeChildAt(pic_arr.shift());
}catch(
err:Error){} 
und instanzier den array so
PHP-Code:
var pic_arr:Array = new Array(4)//die anzahl der gleichzeitig vorhandenen bilder 
sollte klappen

mfg
sx
shin10 ist offline   Mit Zitat antworten
Alt 12-06-2009, 01:47   #8 (permalink)
asFlasher
 
Benutzerbild von ksw24
 
Registriert seit: Jul 2006
Beiträge: 1.136
Hallo,

danke - danke...habe es so ähnlich gemacht. Ich sorge einfach dafür, dass es nur ein Element im Array gibt, dieses wird dann nach dem Fade-In entfernt und wieder mit dem nun eingefadetem Objekt belegt.

Hätte nicht gedacht, dass es an dem Array liegt, aber es scheint glatt so. Vielen Dank für den Hinweis.

Gruß ksw24
ksw24 ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
performance, removechild, ruckeln, timer, tween

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 13:05 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele