1&1 DSL
Flashhilfe.de - Flash Community

Preloading der Bilder aus XML-Gallery [Flash 10]

Forum > ActionScript 3.0 > Preloading der Bilder aus XML-Gallery

 


AntwortenRegistrieren Seite1

 30.01.2010, 17:24 
Benutzerbild von lil1
Beiträge: 5
Registriert: Jan 2010

Preloading der Bilder aus XML-Gallery
Hallo zusammen,

ich habe hier eine Gallerie die ich aus einem XML-File zusammenbaue.
Beim Laden werden erst alle LoaderObjects in ein Array gepackt und danach herausgelesen. So garantiere ich dass die Reihenfolge des XML-FIles und die Zugehörigkeit der Objekte (evtl. Info Text) bewahrt wird. Soweit so gut.

Nun möchte alle Bilder erst vorladen und dann anzeigen.
Dabei will ich aber die Gesamtgröße aller Bilder wissen und den gesamten Ladestatus (BytesLoaded) um eine prozentuelle Angebe machen zu könenn.
Bsp.  23% loaded etc..

Da beim ProgressEvents nur die contentLoaderInfo übertragen wird, weiß ich nicht wie ich zu den zugehörigen LoaderObjekten zuordnen soll, oder überhaupt trennen. Weil beim Ladeprozess wird die Funktion permanent aufgerufen....

Hoffe habe ich halbwegs klar ausgedrückt...

Code:
ActionScript:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import flash.display.*;
import flash.events.Event;
import flash.events.ProgressEvent;


var loadedThumbs:Array = new Array();

// LOAD XML
var xml:XML;
var xmlList:XMLList;
var xmlFile:String = "data/catalog.xml";
var urlRequest:URLRequest = new URLRequest(xmlFile);
var urlLoader:URLLoader = new URLLoader();
   urlLoader.load(urlRequest);
   urlLoader.addEventListener(Event.COMPLETE,urlLoaded);


function urlLoaded(event:Event):void {
   

   xml = XML(event.target.data);
   xmlList = xml.children();


   for (var j:int=0; j<xmlList.length(); j++) {

      var urlReq:URLRequest = new URLRequest(xmlList[j].url);   // die <url> wird ausgelesen
      var thumLoader:Loader = new Loader ();
      thumLoader.load(urlReq);
      loadedThumbs.push(new Array(thumLoader, 0));  // [loaderObject, loaded]
      
      thumLoader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loading);
      thumLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, completed);
   }
   
   
   
   function loading(e:ProgressEvent):void  {
      
      // HIER!
      // wie kriege ich die zugehörigkeit des contentLoaderInfo-Events zum loaderObject?! 
      
      trace(e.target);
   }
   

   
   function completed(e:Event):void
   {
      
      for (var i:int=0; i<loadedThumbs.length; i++)
      {
      
         var thumb = loadedThumbs[i][0];
         if (thumb.content)
            if (e.target.content.name == thumb.content.name)
               loadedThumbs[i][1] = 1;
      
         if (thumb && !contains(thumb) && loadedThumbs[i][1] == 1)
         {   
            thumb.width = 100; //tester
            thumb.height = 100;
            thumb.x = (thumb.width+10)*i;
            thumb.y = 0;
            addChild(thumb);
         
         } // if (thumb && !contains(thumb))
         
      } // for (var i:int=0; i<loadedThumbs.length; i++)
      
      
   }
   
   
}



Ideen wie man die byteTotal und bytesLoaded speicehrn kann? Ich hätte es am liebsten so:

ActionScript:
1
2
3
4
5
Array (
(loaded => y, total => x),
(loaded => y, total => x),
...
)
Schlagwörter: AS3, event, loaderInfo, preload
Geändert von lil1 am 30.01.10 um 17:31 Uhr

 03.02.2010, 14:06Re1
Beiträge: 54
Registriert: Feb 2007

Jede contentLoaderInfo enthält einen Verweis auf den zugehörigen Loader.
 04.02.2010, 13:10Re2
Benutzerbild von lil1
Beiträge: 5
Registriert: Jan 2010

Themenautor/in

absolut unhilfreich!

beim eintreten des Events ProgressEvent.PROGRESS wird die funktion loading aufgerufen. per e.target komme ich an das LoaderInfoObject. Dieses Objekt hat aber noch keinen namen, keine url und nichts eindeutiges, da es noch nicht komplett geladen wurde.
über e.target.name  erreiche ich es also nicht.
Frage ist:
Wie bekomme ich den Namen des Loader- oder LoaderInfoObjects ?
 
nicht sichtbar bei eingeloggten Mitgliedern
 04.02.2010, 14:56Re3
Beiträge: 545
Registriert: May 2007

nicht gleich so agressiv :D. Also e.target gibt schon wie gesagt dann das was der loader lädt an und e.currentTarget gibt den loader selbst an
Bitte keine pn´s wegen irgendwelchen fragen zu Threads, dafür gibt es sie ja schließich
 06.02.2010, 02:16Re4
Benutzerbild von lil1
Beiträge: 5
Registriert: Jan 2010

Themenautor/in

war nicht bös gemeint, mag halt klare ansagen ;)

wenn ich bei der ProgressEvent function loading  e.currentTarget.name  ausgeben möchte (um es in einem array mit den bytesLoaded/bytesTotal zu speichern und mit diesem namen zuzuorden)  kommt die folgende meldung (da ja das LoaderObject noch keinen namen hat.)
ActionScript:
1
2
ReferenceError: Error #1069: Eigenschaft name für flash.display.LoaderInfo nicht gefunden und es ist kein Standardwert vorhanden.
   at MethodInfo-89()


gibts ne andere möglichkeit eine zuordnung zu simulieren?
Geändert von lil1 am 06.02.10 um 02:19 Uhr

 09.02.2010, 11:01Re5
Beiträge: 54
Registriert: Feb 2007

Dann werde ich es etwas unklarer formulieren, damit es etwas hilfreicher wird:


Error #1069 kommt nicht deswegen, weil das LoaderObject noch keinen Namen hat sondern weil die Klasse flash.display.LoaderInfo überhaupt nicht über die Eigenschaft "name" verfügt, also niemals haben wird.

Wie ich schon geschrieben habe: in der Funktion loading(e:ProgressEvent) kommst du an die zugehörige LoaderInfo über e.target und an den zugehörigen Loader mit e.target.loader

Wenn du es trotzdem irgendwo in einem Array speichern musst, dann kannst du auch direkt einen Verweis auf die LoaderInfo speichern, einen namen brauchst du nicht.

Ich empfehle dir dir unter http://help.adobe.com/en_US/AS3LCR/Flash_10.0/index.html die Klasse Loader und LoaderInfo anzusehen.
 
nicht sichtbar bei eingeloggten Mitgliedern1&1 Webhosting
 14.02.2010, 17:17Re6
Benutzerbild von lil1
Beiträge: 5
Registriert: Jan 2010

Themenautor/in

wenn ich folgendes ausführe:
ActionScript:
1
2
3
4
   function loading(e:ProgressEvent):void {
      trace(e.target.loader);
   }
   


kommt die fehlermeldung:
ActionScript:
1
2
3
Error: Error #2099: Das ladende Objekte ist noch nicht weit genug geladen, um diese Informationen zu liefern.
   at flash.display::LoaderInfo/get loader()
   at MethodInfo-90()
 15.02.2010, 01:36Re7
Beiträge: 54
Registriert: Feb 2007

mit trace versuchst du an Informationen zu kommen die noch nicht zur Verfügung stehen, der Loader ist aber da. Eigentlich willst du ja an e.target.bytesLoaded ran oder?
 08.03.2010, 13:37Re8
Benutzerbild von lil1
Beiträge: 5
Registriert: Jan 2010

Themenautor/in

ich habe etwas nützliches hier gefunden:

http://code.google.com/p/as3-multiple-file-preloader/
 
Themen
Ähnliche Beiträge zum Thema
 
AntwortenRegistrieren Seite1

Schnellantwort

Du musst registriert sein, um diese Funktion nutzen zu können.
Partner Webseiten: DesignerInAction.de   Designnation.de   Mediengestalter.info   php-resource.de   phpforum.de   phpwelt.de   Pixelio.de   PSD-Tutorials.de   Tutorials.de

Haftungsausschluss   Datenschutzerklärung   Hier Werben   Impressum
© 1999-2012 Sebastian Wichmann - Flashhilfe.de