tot == car
per quel che mi riguarda non faccio mai un controllo di questo tipo ...
getBytesLoaded parte da -1 , getBytesTotal da 0 ... se getBytesLoaded e' zero e getBytesTotal non e' ancora disponibile il loop va a meretrici ...
if car >= tot && tot != NaN && tot > 0
... questo assicura , in parte , di aver finito il preload ... mentre nel durante , l' infinity e' causato proprio dal discorso appena fatto ...
0 / 0 quanto fa ???
infinity ...
quindi sarebbe
tot = foto.getBytesTotal();
car = foto.getBytesLoaded();
if( car >= tot && tot != NaN && tot > 0 ) {
// preload finito
}
else {
perc = Math.floor( ( car / tot ) * 100 );
perc = perc == infinity || perc == undefined ? 0 : perc;
// e qui tutto quello che vi pare con il preload
}
importante, i preloads conviene sempre farli con floor e non con round o ceil , questo perche' round si comporta come ceil , ovvero al 99.6% arrotonda a 100, mentre 100 non e' ... il floor rimane 99 finche' non e' proprio 100 ...
con questo presupposto si potrebbe semplcificare con ...
tot = foto.getBytesTotal();
car = foto.getBytesLoaded();
perc = Math.floor( ( car / tot ) * 100 );
perc = perc == infinity || perc == undefined ? 0 : perc;
if( car >= tot && perc == 100 ) {
// preload finito
}
else {
// e qui tutto quello che vi pare con il preload
}
prova
[editato]
qualora ci siano movimenti decellerati si puo' semplicemente fare un controllo in piu' sul primo if
if( car >= tot && perc == 100 && Math.ceil( movie._x ) >= 98 ) {
movie._x = 100;
// etc etc ...
}



Rispondi quotando