Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    un paio di chicche e utilità

    ciao a tutti, posto un paio di cose che magari possono essere interessanti per un po' di gente...

    la prima è questa:

    - ho appena scoperto (giuro che non ci ero mai incappato) un po' di comportamenti strani delle funzioni di creazione e rimozione dinamica dei movieclips (attachMovie, duplicateMovieClip, createEmptyMovieClip, removeMovieClip)

    partiamo con l'attachMovie che per esempio non funziona se come profondità si va a settare un numero inferiore a -16384

    provate voi stessi... create un mc nella libreria e come linkage (concatenamento) dategli il nome "palla" e poi mettete il seguente codice

    this.attachMovie("palla", "palla1", -16384); //attacca

    invece:

    this.attachMovie("palla", "palla1", -16385); //non attacca
    ________________________________

    altra cosa molto simpatica: abbiamo detto che l'attachMovie fa casini solo se come depth diamo un numero inferiore a -16384, ma nessun problema per esempio in positivo... possiamo dargli 20fantastiliardi come depth e quello funziona...

    se però poi vogliamo usare il removeMovieClip...

    attachMovie("palla", "palla1", 10); //attacca
    removeMovieClip(palla1); //rimuove (attacca e poi rimuove subito)
    ________________________
    attachMovie("palla", "palla1", -10); //attacca
    removeMovieClip(palla1); //non rimuove

    scopriamo quindi che se vogliamo usare il remove "palla1" deve essere stato attaccato allo stage con una depth positiva... se la depth è minore di 0 non la rimuove...

    altra chicca...

    attachMovie("palla", "palla1", 1048575); //attacca
    removeMovieClip(palla1); //rimuove
    _________________________
    attachMovie("palla", "palla1", 1048576); //attacca
    removeMovieClip(palla1); //non rimuove

    e scopriamo così che oltre a essere positiva deve anche essere inferiore a 1048576

    =================================
    trascinate ora il simbolo palla sullo stage creandone un istanza alla quale date nome di istanza "palla"...

    cancellate le azioni di prima e mettete

    duplicateMovieClip("palla", "palla1", -16384); // duplica
    palla1._x+=100; //sposta altrimenti non si vede

    duplicateMovieClip("palla", "palla1", -16385); // non duplica
    palla1._x+=100; //sposta altrimenti non si vede

    stesso limite dell'attachMovie... e anche qui nessun limite invece in direzione positiva. anche applicando il removeMovieClip, valgono le stesse regole viste prima per l'attachMovie
    ======================================
    apriamo ora un nuovo fla e nel primo frame mettiamo queste azioni

    // facciamo un bel triangolo
    createEmptyMovieClip("tri", -16385);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();


    come vedete il createEmptyMovieClip invece funziona anche con profondità inferiori a -16384... nessun limite, nemmeno in positivo

    se ora per finire andiamo a mettere il solito removeMovieClip

    createEmptyMovieClip("tri", 100);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();

    removeMovieClip(tri); //rimuove correttamente
    _______________________-
    createEmptyMovieClip("tri", -10);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();

    removeMovieClip(tri); //non rimuove
    _________________________-
    createEmptyMovieClip("tri", 1048575);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();

    removeMovieClip(tri); //rimuove correttamente
    _______________________-
    createEmptyMovieClip("tri", 1048576);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();

    removeMovieClip(tri); //non rimuove

    notiamo che anche se il createEmptyMovieCLip non ha limiti il remove continua ad avere i soliti


    ora... forse mi direte che ho scoperto l'acqua calda... ma giuro che non ne avevo mai sentito parlare ne me n'ero accorto... accetto ben volentieri aggiunte, commenti, precisazioni, insulti etc...

    se c'è qualcuno che conosce bene l'argomento gradirei essere illuminato ulteriormente

    ciauz
    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  2. #2
    già da flash MX nella documentazione, adesso non saprei dirti dove esattamente però, c'era scritto espressamente che il range gestibile da flash per quanto riguarda i livelli era: ~-16000 < 0 < ~16000
    Free ActionScript Editor

    Y en silencio y sin cruzar una palabra
    solamente una mirada es suficiente para hablar

  3. #3
    non so dirti perche' , ma ho scritto la soluzione


    codice:
    MovieClip.prototype.removeMovie = function() {
    	// andr3a
    	var newName = new String( "my_rand" + Math.random()*10000000 );
    	this.createEmptyMovieClip( newName , Math.random()*100000 );
    	var myDepth = this[newName].getDepth();
    	this.swapDepths( myDepth );
    	this.removeMovieClip();
    }
    
    this.createEmptyMovieClip("tri", 1048576);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0,0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0,0);
    tri.endFill();
    
    this["tri"].removeMovie();


    Il movie si swappa col suo movie interno e si elimina portandosi dietro anche quel movie interno col livello che non si elimina
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    fichissimo andr3a... ma se po' fa de meglio...
    codice:
    MovieClip.prototype.removeMovie = function() {
    	// p4n7a
    	this.swapDepths(random(100000));
    	this.removeMovieClip();
    };
    
    this.createEmptyMovieClip("tri", 1048576);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0, 0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0, 0);
    tri.endFill();
    this["tri"].removeMovie();
    semplicemente swappi con un valore + basso senza creare il mc interno

    cmq bella l'idea di swapparlo prima di rimuoverlo e portarlo in un range funzionante... non ci avrei mai pensato tnx
    ____________________

    per flash_mx2 invece... mi era sfuggita quella parte, non mi sono mai letto tutta la documentazione... cmq sia non è completamente vero visto che in positivo non ci sono limiti per l'attach e il duplicate, ma solo in negativo... inoltre per il createEmpty... non ce ne sono proprio... mentre per il remove non mi pare si dicesse che la depth deve essere positiva e minore di 1048576
    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  5. #5
    Originariamente inviato da panta
    semplicemente swappi con un valore + basso senza creare il mc interno
    e lo so, c'avevo provato ma non mi swappava




    ... cmq, per concludere senza usare cose deprecate, tipo il random() ...


    codice:
    MovieClip.prototype.removeMovie = function() {
    	// p4n7a / andr3a
    	this.swapDepths( Math.random()*100000 );
    	this.removeMovieClip();
    }


    ok ?? ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  6. #6
    :quote: :gren: si vabbè ma sei pignolo mica da ridere...!
    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  7. #7
    Originariamente inviato da panta
    fichissimo andr3a... ma se po' fa de meglio...
    codice:
    MovieClip.prototype.removeMovie = function() {
    	// p4n7a
    	this.swapDepths(random(100000));
    	this.removeMovieClip();
    };
    
    this.createEmptyMovieClip("tri", 1048576);
    tri.beginFill(0xFF0000, 100);
    tri.moveTo(0, 0);
    tri.lineTo(0, 100);
    tri.lineTo(100, 0);
    tri.lineTo(0, 0);
    tri.endFill();
    this["tri"].removeMovie();
    semplicemente swappi con un valore + basso senza creare il mc interno

    cmq bella l'idea di swapparlo prima di rimuoverlo e portarlo in un range funzionante... non ci avrei mai pensato tnx
    ____________________

    per flash_mx2 invece... mi era sfuggita quella parte, non mi sono mai letto tutta la documentazione... cmq sia non è completamente vero visto che in positivo non ci sono limiti per l'attach e il duplicate, ma solo in negativo... inoltre per il createEmpty... non ce ne sono proprio... mentre per il remove non mi pare si dicesse che la depth deve essere positiva e minore di 1048576

    sì sì, lo so.. loro, la macromedia, assicuravano solo fino a quei valori...
    Free ActionScript Editor

    Y en silencio y sin cruzar una palabra
    solamente una mirada es suficiente para hablar

  8. #8
    ah bon, ma "soddisfatti o rimborsati"?
    "La consapevolezza di Case suddivisa come perle di mercurio. La sua visione era sferica, come se una singola retina rivestisse la superficie interna di un globo che conteneva tutte le cose, se tutte le cose si potevano contare." —Neuromante, William Gibson (1984)

  9. #9
    magari :quote:
    Free ActionScript Editor

    Y en silencio y sin cruzar una palabra
    solamente una mirada es suficiente para hablar

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.