Un paio di giorni fa ho realizzato una semplice spia di livelli che si autoincrementa di 1000000 in 1000000 ed utilizza la proprieta' di MX2004 getInstanceAtDepth( level )
dopo non so quanti minuti tale script si e' fermato al numero 4294950913 e pensavo di aver trovato il famoso "pannello di controllo" di MX2004, quello che e' irraggiungibile o quello che non ha piu' il bug che aveva in MX, ovvero quello non piu' editabile.
Dopo qualche tentativo di vedere, sezionare, utilizzare tale livello mi accorgo con stupore che questo e' di fatto non raggiungibile ma che allo stesso tempo ha un' imperfezione che potrebbe dare molto fastidio.
Questo livello infatti si "mangia" la grafica nello stage.
Esempio pratico
Aprite un nuovo documento in MX2004, create un nuovo layer e disegnate un quadrato nero o del colore che preferite, testate ... tutto ok, si vede il quadrato o rettangolo che sia.
Adesso sul livello sopra, clickate e scrivete nel pannello delle actions quanto segue:
createEmptyMovieClip( "mangiaMovie", 4294950913 );
testate ... bene, dov'e' il quadrato disegnato a mano , quindi con livello sicuramente negativo e diverso da 4294950913 ???
La cosa piu' stravagante e' che i comportamenti sono assolutamente randoms .. ad esempio se disegnate altro sullo stesso layer del quaddrato anche questo non verra' piu' visto ma se e' un campo di testo solo questo verra' visto, se fate un altro layer ancora invece si vedranno tutti i disegni ...
Ci sono altre casistiche anomale che mi fanno pensare che sebbene sia difficile arrivare ad utilizzare questo livello, conviene sicuramente evitare di usarlo.
Assieme a questo, nello spyLevel di cui vi parlavo ho riscontrato "movies fantasma" anche a livello 4294950914, 4294950915 e 4294950916 dove addirittura nel trace del instance di quest' ultimo e' scappato fuori un _level0 ...
Conclusione
eliminare la possibilita' di utilizzare i seguenti livelli dai vostri SWF:
4294950913 - 4294950914 - 4294950915 - 4294950916
Tips
codice:
Array.prototype.in_array = function( what ) {
// andr3a [ 25 / 03 / 2004 ]
// check if a value is inside an array
// EXAMPLE:
// var myArray = new Array( "hello", "world", Array("one", "two") );
// trace( myArray.in_array( "hello" ) ); // true
// trace( myArray.in_array( "hi" ) ); // false
// trace( myArray.in_array( "two" ) ); // true
for( var a = 0; a < this.length; a++ ) {
if( this[a] == what ) {
return true;
}
else if( this[a] instanceof Array ) {
return this[a].in_array( what );
}
}
return false;
}
var ignoreLevel:Array = new Array( 4294950913, 4294950914, 4294950915, 4294950916 );
// aggiungere eventualmente altri livelli che non si desidera sovrascrivere
// ora prima di usare il livello in duplicateMovieClip o in quello che volete ...
if( !ignoreLevel.in_array( myLevel ) ) {
// duplica o fai quello che vuoi ...
}
sono ben accetti commenti, smentite, approfondimenti, io sto continuando a cercare nei livelli oltre il 4294950916, vediamo cosa succede