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 ...
}