Zurück   Flashforum > Flash > ActionScript > ActionScript 1

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 07-07-2005, 09:24   #1 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
dynamisch erzeugte clips: inhalte verschwinden zur laufzeit??

hallo flasher,
ich kämpf schon seit wochen mit folgendem problem:

ich lade externe .jpgs in mein flashmovie, und zwar über aufruf einer .txt textdatei, die die bildernamen enthält. diese namen werden als variablen in ein array geladen und auf Basis der array-länge wird dann dynamisch ein movieclip pro bild an einen containerMC auf der hauptzeitleiste attached.

der code, der in frame 1 auf der zeitleiste dieses Bildlade-movieclips liegt, sieht folgendermaßen aus:

//"bild_mc" ist ein auf der bühne des BildladeClips liegender, leerer MC
//"bildname" ist der beim attachen des Clips übergebene variablenwert aus //dem angesprochenen array

this.bild_mc.loadMovie(bildname);
this.onEnterFrame = function() {
this.gesamt = this.bild_mc.getBytesTotal();
this.bereits = this.bild_mc.getBytesLoaded();
this.prozent = this.bereits*100/this.gesamt;
if (this.bild_mc.getBytesTotal()>12) {
this.balken_mc._width = this.prozent*0.5;
this.pausgabe = int(this.prozent)+" %";
}
if (this.prozent>=100) {
this.bild_mc._width = 50;
this.bild_mc._height = 50;
delete this.onEnterFrame;
this.balken_mc._visible = 0;
this.pausgabe = "";
}
};


Offline klappt alles wie es klappen soll. online leider nicht.

Folgende Probleme treten auf:
in Mozilla Firefox werden die Bilder meistens überhaupt nicht angezeigt, obwohl die externen variablen anscheinend ordnungsgemäß angekommen sind. Witzigerweise werden manchmal ein paar Bilder angezeigt, verschwinden dann aber plötzlich zur Laufzeit des movies einfach. In IE 6 werden dagegen eigentlich alle bilder richtig geladen.

Sowohl in IE und Mozilla funktioniert die Preloader-Anzeige nur offline, online wird der preloader einfach nicht gestartet und ich versteh echt nicht warum.

das teil in aktion zu sehen gibts auf folgender URL:

http://www.testrender.com/_tests/main.html

dort bitte auf das linke obere feld klicken, dann den menüpunkt "photos" wählen. dort ist die bildergallerie zu sehen.

kann mir das irgendwer erklären? liegts daran, dass das flash movie für 15 clips einen preloader anzeigen müsste und dafür das streaming nicht schnell genug ist? ich verstehs nicht.

bitte um euren rat

danke

david.
b-lame ist offline   Mit Zitat antworten
Alt 07-07-2005, 13:22   #2 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Du solltest versuchen, die Fotos hintereinander zu laden, wenn du Preloader verwendest. Flash "verschluckt" sich sonst gerne mit den Events. Also: im Preloader nach dem Löschen des onEnterFrame-Events über einen Funktionsblock das nächste Bild laden und nicht über eine for-Schleife o.ä.

BTW: du könntest deine bild_mc._width und ._heigth auch schon vor dem Preloader auf 50 stellen, da die ja nicht abhängig von der echten Größe der Bilder sind.
  Mit Zitat antworten
Alt 11-07-2005, 10:54   #3 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
dank dir holger,

ich hatte schon so einen verdacht, dass das notwendig sein würde.
werde mich morgen nochmal melden wenns funktioniert hat.
b-lame ist offline   Mit Zitat antworten
Alt 13-07-2005, 07:32   #4 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
hi,

also ich lade jetzt die bilder, wie von holger vorgeschlagen, mit einer kleinen abfrage immer eines nach dem anderen.
zumindest werden sie jetzt auch korrekt geladen (Danke Holger!), allerdings wird der preloader (balken und dynam. textfeld) immer noch nicht angezeigt (Offline funktionierts, online nicht).

in den zu ladenden attacheden containerclips liegen nun drei frames: in frame 1 vergleiche ich eine dem clip beim attachen zugewiesene "lade_id" mit einer auf einem controllerclip auf der hauptebene angelegten variable (var zu_ladendes_bild):

this.onEnterFrame = function() {
//lade_id wurde beim attachen der clips individuell generiert
if (_parent.controlMC.zu_ladendes_bild == this.lade_id) {
this.gotoAndStop("bild_laden");
}
};
stop();


in frame 2, dem frame "bild_laden" liegt folgender code:

//bildname (pfad zum .jpg) kommt aus externer textdatei

this.bild_mc.loadMovie(bildname);
this.bild_mc._width = 50;
this.bild_mc._height = 50;

this.onEnterFrame = function() {
this.gesamt = this.bild_mc.getBytesTotal();
this.bereits = this.bild_mc.getBytesLoaded();
this.prozent = this.bereits*100/this.gesamt;
if (this.bild_mc.getBytesTotal()>12) {
this.balken_mc._width = this.prozent*0.5;
this.pausgabe = int(this.prozent)+" %";
}
if (this.prozent>=100) {
this.balken_mc._visible = 0;
this.pausgabe = "";
this.gotoAndStop("bild_geladen");
}
};

stop();


und schliesslich liegt in frame 3 folgender code:

_parent.controlMC.zu_ladendes_bild += 1;
stop();


ich hab mal das .fla des containerclips attached. kann mir wer sagen, wieso die ladeanzeige ONLINE nicht funktioniert? (offline tut sie das anstandslos).
Angehängte Dateien
Dateityp: zip ladecontainer.zip (5,5 KB, 6x aufgerufen)
b-lame ist offline   Mit Zitat antworten
Alt 13-07-2005, 11:44   #5 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Du solltest deinen onEnterFrame-Event wieder löschen, wenn das Bild geladen wurde...

Und wenn du mehrere davon benötigst, häng die Events an verschiedene MCs und nicht alle an die Hauptzeitleiste. Online könnte es sonst zu zeitkritischen Problemen kommen, weil ja nich so schnell nachgeladen wird, wie von der Festplatte...
  Mit Zitat antworten
Alt 13-07-2005, 15:41   #6 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
Zitat:
Zitat von agedoubleju
Du solltest deinen onEnterFrame-Event wieder löschen, wenn das Bild geladen wurde...
Und wenn du mehrere davon benötigst, häng die Events an verschiedene MCs und nicht alle an die Hauptzeitleiste.
hmm... aber der onEnterFrame Event liegt ja auf einem einzelnen Frame innerhalb des attacheden BildMCs (siehe attachment vorheriger Post).
Und dieser Frame wird über die gotoAndStop Aktion verlassen, sobald das Bild geladen wurde. Läuft der onEnterFrame Event denn dann trotzdem weiter?

und hängt mein preloader problem etwa auch damit zusammen?
b-lame ist offline   Mit Zitat antworten
Alt 13-07-2005, 16:10   #7 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Der onEnterFrame-Event läuft auf der Hauptzeitleiste so lange, bis er gelöscht wird. Auf einem MC läuft er solange, wie der MC existiert oder bis er gelöscht wird...
  Mit Zitat antworten
Alt 14-07-2005, 07:54   #8 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
ok, hab jetzt mal eine trace aktion in das event eingebaut und du hattest natürlich recht. Das script wurde zur Laufzeit immer weiter ausgeführt. Was ich aber interessant finde ist, dass das onEnterFrame Event in Frame 1 des Clips anscheinend NICHT weiter ausgeführt wird, sobald der frame verlassen wurde, das oben angesprochene Event in Frame 2 aber schon. Wie lässt sich denn sowas erklären?

naja, jedenfalls hat das einauen der delete aktion mein preloader problem auch nicht gelöst. ich kapier das nicht. hab jetzt schon mehrere varianten, unter anderem mit der loader klasse ausprobiert, aber der balken will und will nicht wachsen. grmbl. irgendjemand einen vorschlag? (file wurde in einem vorhergehenden post attached).
b-lame ist offline   Mit Zitat antworten
Alt 14-07-2005, 08:24   #9 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 25
Leider kann ich dir die Frage nicht beantworten, weil ich nen AS-Noob bin. Aber könntest du mir vielleicht mal erklären, wie ich das Script und die Textdatei aufbauen muss, so dass sich jpg's der Reihe nach in einen einzigen MC legen??? (auf Knopfdruck versteht sich)

Quasi so wie dein Ladecontainer...

Geändert von sincomp (14-07-2005 um 08:26 Uhr)
sincomp ist offline   Mit Zitat antworten
Alt 14-07-2005, 08:37   #10 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
Frame 1 des Clips anscheinend NICHT weiter ausgeführt wird, sobald der frame verlassen wurde
Wenn der nächste Frame ein Schlüsselframe ist und der MC dann nicht mehr existiert, wird natürlich auch der Event gelöscht.

Aber hier mal ein Vorschlag für einen Preloader mit Balken:
ActionScript:
  1. //nie den eigenen Film preloaden!
  2. _global.dZ = this;//Referenz auf die Hauptzeitleiste
  3. _global.dZ.createEmptyMovieClip("mcHolder",1);//leeren MC erstellen
  4. _global.dZ.mcHolder.loadMovie("mein.swf");//Film (oder auch jpg) nachladen
  5.  
  6.  
  7. _global.dZ.onEnterFrame = function(){//kontinuierlich checken, ob fertiggeladen
  8.     var fin = int(_global.dZ.mcHolder.getBytesLoaded()*100/_global.dZ.mcHolder.getBytesTotal());//Prozentwert
  9.     trace("fin="+fin);
  10.     _global.dZ.ausgabe.text="[ "+fin+" % geladen ]";//Textfeld mit Prozentangabe
  11.     _global.dZ.mcPre.gotoAndStop(fin);//mcPre ist ein MC mit einem Balkentween über 100 Bilder (für 1-100 Prozent)
  12.     if(fin >= 100 && _global.dZ.mcHolder._width > 0 && _global.dZ.mcHolder._height>0) {//wenn Film geladen und der MC existiert...
  13.         delete _global.dZ.onEnterFrame;//den Event wieder löschen
  14.         _global.dZ.ausgabe.text="";//Textfeld löschen
  15.         _global.dZ.mcPre.swapDepths(55);
  16.         _global.dZ.mcPre.removeMovieClip();//Balken-MC löschen
  17.         trace("Laden beendet");
  18.     }
  19. }
  Mit Zitat antworten
Alt 14-07-2005, 15:32   #11 (permalink)
Neuer User
 
Registriert seit: Jun 2002
Ort: austria
Beiträge: 36
@sincomp:

ich empfehle dir mal folgenden link, ich glaube wenn du dir da eines der tuts loadest hast dus leichter, als mit meinem konfusen script.


http://www.flashstar.de/tutlist/index.php3?bereich=flash2004extern


schau dir dort mal die "dynamic image" tutorials an. auf basis von denen hab ich mein script auch entwickelt.


@holger:

Zitat:
Wenn der nächste Frame ein Schlüsselframe ist und der MC dann nicht mehr existiert, wird natürlich auch der Event gelöscht.
ich weiss nicht ob wir da vom selben sprechen: schau dir bitte mal den aufbau meiner .fla an, dann verstehst du was ich meine. ja, der nächste frame nach dem OnEnterFrame Event ist ein keyframe, aber der MC existiert TROTZDEM weiter, weil ja eben die keyframes, auf denen die OnEnterFrame events liegen, INNERHALB des MCs auf der Zeitleiste dieses MCs liegen.

jedenfalls werd ich versuchen dein Script mal ein wenig anzupassen und schaun, obs funktioniert. man liest sich.
b-lame ist offline   Mit Zitat antworten
Alt 14-07-2005, 15:59   #12 (permalink)
agedoubleju
Gast
 
Beiträge: n/a
Zitat:
der nächste frame nach dem OnEnterFrame Event ist ein keyframe
Schau es dir selber mal genau an: du hast deinen onEnterFrame-Event mit "this" an die Zeitleiste des MCs gehängt. Ein Schlüsselbild beendet allerdings den Frame und damit auch den Event. Schlüsselbilder bilden eine Grenze, anders als normale Bilder...
  Mit Zitat antworten
Alt 15-07-2005, 09:21   #13 (permalink)
Neuer User
 
Registriert seit: Jan 2004
Beiträge: 25
@b-flame: japp schau ich mir ma an... Danke
sincomp 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 08:04 Uhr.

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


Copyright ©1999 – 2012 Marc Thiele