17. oktober 2007 - 00:39
Der er
16 kommentarer
størrelse af array af billeder
lad os sige jeg har et array med 15 billeder, disse loades på en samlet gang via xml. lads os så sige jeg gerne vil lave en status-indikator for den samlede størrelse samt loadning i forhold til samlet størrelse - hvordan kan jeg gøre det? jeg har forsøgt noget i stil med: this.onEnterFrame = function() { for (var i:Number = 0; i<_items; i++) { samletStatus += billeder[i].getBytesLoaded(); } trace(samletStatus) men problemet er at man er nødt til at løbe igennem et array, og lægge værdierne sammen, men dette kludrer sig så sammen med enterFrame'en, der skal være der for at opdatere getBytesLoaded. Jeg kan altså godt få den til at spytte de loadede værdier ud hver for sig, men jeg skal jo have summeret de 15 værdier.
Annonceindlæg fra QNAP
17. oktober 2007 - 00:40
#1
... kludret resulterer så i at værdierne løber løbsk og gentager med at summere.
17. oktober 2007 - 08:53
#2
Du skal vel bare resette samletStatus inden løkken, så du ikke lægger den forrige "samletStatus" til? mvh mat
17. oktober 2007 - 12:20
#3
Ok tak, det virker "lidt", men hvis man så laver en progress-bar ud fra tallene så er denne kortvarrigt 0, og blinker dermed nærmest, hvordan kan man komme ud over dette?
17. oktober 2007 - 14:48
#4
Ved at sætte progress barens størrelse efter løkken?
17. oktober 2007 - 22:06
#5
Den ser sådan ud: var crazy1:Number = 0; var crazy2:Number = 0; this.onEnterFrame = function() { crazy1 = 0 crazy2 = 0 for (var i:Number = 0; i<_items; i++) { crazy1 += loadingStat[i].getBytesTotal(); crazy2 += loadingStat[i].getBytesLoaded(); statusPic = crazy2/crazy1; } crazyHorse.text = statusPic; loadIndi._width = Math.round((cols*(w+s)-s)*statusPic) trace(loadIndi._width) if(statusPic == 1) { delete this.onEnterFrame; } Og den virker fint inde i flashplayer test'eren men ude i browseren blinker statusbaren helt vildt.
17. oktober 2007 - 22:11
#6
Undskyld de lidt mærkelige varibel navne - det var sent, og var løbet tør for indlysende navne.
17. oktober 2007 - 23:00
#7
Skifter tekstfeltet også fra 0 til den ønskede værdi, eller kan det have noget at gøre med din udregning med "cols" og "w" og "s"?
18. oktober 2007 - 00:58
#8
selve tekstfeltet springer frem og tilbage i værdi - men kun i browserer og ikke i den "interne flash authoer test player". Cols, w og s er konstante.
18. oktober 2007 - 08:11
#9
Det lyder underligt - det kan ikke have noget med den måde du henter billederne på at gøre?
18. oktober 2007 - 11:15
#10
Ja det tænkte jeg også og flyttede load-status koden ind i en if-statement der først kører efter arrayet med links til billederne er kørt 100 % igennem. Her er koden: var thumbHolder:MovieClip; var thumbClip:MovieClip; var container:MovieClip = this.createEmptyMovieClip("container", 2); function loadGrid():Void { cols = Math.floor((Stage.width-s-128)/(w+s)); rows = Math.ceil(_items/cols); container._y = 64+16 loadingStat = new Array(); for (var i:Number = 0; i<_items; i++) { var thumb:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.thumb; var nCat:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.cat; thumbHolder = container.createEmptyMovieClip("thumbHolder"+i, i); thumbClip = thumbHolder.createEmptyMovieClip("thumbClip"+i, i); thumbClip.loadMovie(thumb); thumbHolder.i = i; thumbHolder.nCat = nCat; loadingStat.push(thumbClip) thumbHolder.onRelease = thumbRelease; if(i+1 == _items){ trace("go-tjek") var crazy1:Number = 0; var crazy2:Number = 0; this.onEnterFrame = function() { crazy1 = 0 crazy2 = 0 for (var i:Number = 0; i<_items; i++) { statusPic = crazy2/crazy1; crazy1 += loadingStat[i].getBytesTotal(); crazy2 += loadingStat[i].getBytesLoaded(); } crazyHorse.text = statusPic; loadIndi._width = Math.round(512*statusPic) trace(loadIndi._width) if(statusPic == 1) { delete this.onEnterFrame; } }; } } iniLayout() }
18. oktober 2007 - 14:08
#11
Umiddelbart virker det HELT forkert at se den "this.onEnterFrame" inde i for løkken?
18. oktober 2007 - 14:37
#12
ja men på den måde bliver den først triggered efter arrayet er kørt helt igennem ( if(i+1 == _items){} ), hvis det kunne have været det, men det gør heller ingen forskel. Her er en udgave som opfører sig på samme måde, men hvor "this.onEnterFrame" er flyttet udenfor: var thumbHolder:MovieClip; var thumbClip:MovieClip; var container:MovieClip = this.createEmptyMovieClip("container", 2); function loadGrid():Void { cols = Math.floor((Stage.width-s-128)/(w+s)); rows = Math.ceil(_items/cols); container._y = 64+16 loadingStat = new Array(); for (var i:Number = 0; i<_items; i++) { var thumb:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.thumb; var nCat:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.cat; thumbHolder = container.createEmptyMovieClip("thumbHolder"+i, i); thumbClip = thumbHolder.createEmptyMovieClip("thumbClip"+i, i); thumbClip.loadMovie(thumb); thumbHolder.i = i; thumbHolder.nCat = nCat; loadingStat.push(thumbClip) thumbHolder.onRelease = thumbRelease; } iniLayout() } var crazy1:Number = 0; var crazy2:Number = 0; this.onEnterFrame = function() { crazy1 = 0 crazy2 = 0 for (var i:Number = 0; i<_items; i++) { statusPic = crazy2/crazy1; crazy1 += loadingStat[i].getBytesTotal(); crazy2 += loadingStat[i].getBytesLoaded(); } crazyHorse.text = statusPic; loadIndi._width = Math.round(512*statusPic) if(statusPic == 1) { delete this.onEnterFrame; } };
18. oktober 2007 - 14:41
#13
Det virker også som om statusbaren når at blive den fulde længde før alle billederne popper frem - ca. 3-4 stykker inden.
18. oktober 2007 - 14:42
#14
Hvorfor står "statusPic = crazy2/crazy1;" før du ved hvad "crazy2" og "crazy1" er?
18. oktober 2007 - 19:02
#15
Det var et "crazy" forsøg på at se om det gjorde en forskel at sætte det først, men det gør ingen forskel åbenbart, om det står før eller lige efter. Nu: var thumbHolder:MovieClip; var thumbClip:MovieClip; var container:MovieClip = this.createEmptyMovieClip("container", 2); function loadGrid():Void { cols = Math.floor((Stage.width-s-128)/(w+s)); rows = Math.ceil(_items/cols); container._y = 64+16 loadingStat = new Array(); for (var i:Number = 0; i<_items; i++) { var thumb:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.thumb; var nCat:String = xmlObj.firstChild.childNodes[0].childNodes[i].attributes.cat; thumbHolder = container.createEmptyMovieClip("thumbHolder"+i, i); thumbClip = thumbHolder.createEmptyMovieClip("thumbClip"+i, i); thumbClip.loadMovie(thumb); thumbHolder.i = i; thumbHolder.nCat = nCat; loadingStat.push(thumbClip) thumbHolder.onRelease = thumbRelease; } iniLayout() } var crazy1:Number = 0; var crazy2:Number = 0; this.onEnterFrame = function() { crazy1 = 0 crazy2 = 0 for (var i:Number = 0; i<_items; i++) { crazy1 += loadingStat[i].getBytesTotal(); crazy2 += loadingStat[i].getBytesLoaded(); statusPic = crazy2/crazy1; } crazyHorse.text = statusPic; loadIndi._width = Math.round(512*statusPic) if(statusPic == 1) { delete this.onEnterFrame; } };
19. oktober 2007 - 08:25
#16
Jeg kan ikke umiddelbart få øje på noget, der ville få det til at blinke.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.