Ho un problema di sovraccarico della CPU, durante l'esecuzione del filmato Flash. Controllando il Task Manager, risulta che arriva oltre il 95% di media, e questo - ovviamente - è inaccettabile, anche perchè, su macchine meno potenti, significherebbe la paralisi...
Ragionando sulle possibili cause di questo overflow, mi sono reso conto di della presenza di numerosi onEnterFrame.
Alcuni di questi sono attribuiti, sulla timeline, a specifici mc (vedi esempio):
codice:
_root.payoff.onEnterFrame = function() {
var speed = 10;
payoff._width += (this.targetWidth-this._width)/speed;
payoff._height += (this.targetHeight-this._height)/speed;
};
mentre altri erano riferiti alla timeline stessa:
codice:
onEnterFrame = function() {
....
};
Tutti gli onEnterFrame presenti sono relativi a questa funzione di scala elastica. Già in fase di sviluppo, ho rilevato che, per ottenerne un corretto funzionamento, è necessario che la funzione sia dichiarata almeno un certo tempo (n frame) prima dell'esecuzione. E, al momento di attivarla, ciò deve essere fatto attraverso l'uso, ancora una volta, dell'onEnterFrame (vedi esempio):
codice:
onEnterFrame = function () {
payoff.move3(h/2-10, -170);
payoff.targetWidth = 420;
payoff.targetHeight = 37.9;
};
Ho provato ad evitare questo onEnterFrame creando e richiamando una funzione (vedi esempio) ma in questo caso non funziona, o funziona solo molto parzialmente:
codice:
function miaFunz() {
payoff.move3(h/2-10, -170);
payoff.targetWidth = 420;
payoff.targetHeight = 37.9;
};
_root.miaFunz();
Ad un certo punto, mi sono detto: 'OK, lascio tutto così ed elimino gli onEnterFrame dopo che hanno svolto la loro funzione'.
Così, ho allungato la timeline, par dare ampio spazio temporale all'esecuzione di tutte le funzioni richiamate, e poi ho inserito un sistema di eliminazione (vedi esempio):
codice:
_root.payoff.onEnterFrame = function() {
var speed = 10;
payoff._width += (this.targetWidth-this._width)/speed;
payoff._height += (this.targetHeight-this._height)/speed;
if (_root._currentframe == 600) {
delete this.onEnterFrame;
trace("cancellato 180");
}
};
Ho inserito il trace, per controllare che venisse effettivamente eseguita la funzione delete.
Per gli onEnterFrame precedentemente attribuiti alla timeline, ho creato degli mc vuoti, li ho messi sullo stage, e quindi ho attribuito ad essi gli onEnterFrame.
Però, quando vado ad effettuare la prova (in preview), ne risulta che:
1) La finestra di output mi dice che tutti gli onEnterFrame sono cancellati (o perlomeno, mi mostra tutti i "cancellato + n° del frame"...)
2) Alcune delle funzioni richiamate dagli onEnterFrame precedentemente attribuiti alla timeline, sembrano funzionare in modo imperfetto; in particolar modo - e stranamente - proprio la prima ad essere eseguita, e che quindi dovrebbe avere tutto il tempo necessario, si blocca più o meno prima della metà dell'azione (scala elastica)
3) Il Task Manager mi dice che l'utilizzo della CPU rimane intorno al 95%!!!...
Come posso risolvere?
Qualcuno ha idee / suggerimenti / indicazioni di tutorial & simili per risolvere questo tipo di problema?
Vorrei evitare di dover riscrivere tutto, utilizzando una funzione che possa far a meno degli onEnterFrame...