Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412

    Spostare indietro/avanti gli oggetti tramite actionscript

    Salve, ho un dubbio che oggi ha attanagliato me e il gruppo smanettoni con flash che frequento.
    In pratica volevamo fare un'animazione composta da tre fotografie e 3 pulsanti. A seconda del pulsante che si premeva, doveva entrare da sinistra una determinata foto ad esso associata, questo senza far sparire quella precedentemente visualizzata... Insomma, le foto dovevano entrare una alla volta alla pressione di uno dei pulsanti, mentre in background doveva rimanere impressa quella precedentemente presente ( come se l'una coprisse l'altra) e così via.

    Considerando che l'utente può premere i pulsanti in maniera casuale, non seguendo un preciso ordine, può dunque capitare che si richiami la "foto1" e successivamente la "foto3", e quest'ultima trovandosi ad un livello inferiore, non sarebbe visibile in quanto coperta dalla prima ancora impressa sullo stage.

    Esiste dunque una funzione di actionscript capace di riordinare in tempo reale la predisposizione delle istanze di un determinato livello?

    Per farla breve, cerco il corrispettivo in actionscript del comando Elabora-->Disponi--> "Porta dietro" o "Porta avanti"

    In alternativa, anzichè predisporre le varie immagini su un unico livello, è possibile distribuirle su livelli distinti, ma anche in questo caso servirebbe un comando capace di cambiare la predisposizione dei livelli.

  2. #2
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Ciao

    Posso suggerirti un paio di metodi per gestire i livelli in ActionScript 3.0.


    Supponi di avere sullo stesso livello 2 MovieClip 1 'quadrato' e 1 'cerchio' e il quadrato lo posizioni sopra il cerchio.
    Con una semplice riga di codice inverti la posizione dei 2 oggetti:

    Codice PHP:
    swapChildren(quadratocerchio); 
    Quando mandi in esecuzione il filmato vedrai il cerchio sotto il quadrato anche se sullo stage lo avevi posizionato sotto.

    Esiste un altro metodo per invertire i livelli in modo efficace, qualora gli oggetti che devi posizionare a un livello superiore o inferiore siano molti e devono cambiare livello spesso:

    Supponi di avere 3 MovieClip con al loro interno 3 immagini e li posizioni su un'unico livello con il loro <Nome Istanza> (foto1, foto2, foto3).
    Hai poi 3 pulsanti a cui assegni un listener al click del mouse e nella funzione richiamata crei una variabile di tipo DisplayObject a cui assegni il valore dei tuoi MovieClip.

    Inserisci questo codice e al click sul relativo pulsante l'immagine abbinata alla funzione apparirà in primo piano sopra l' immagine visualizzata in precedenza:

    Codice PHP:
    var livello:uint numChildren;

    pulsante1.addEventListener(MouseEvent.CLICKesegui1);
    pulsante2.addEventListener(MouseEvent.CLICKesegui2);
    pulsante3.addEventListener(MouseEvent.CLICKesegui3);

    function 
    esegui1(evento:MouseEvent):void
    {
        var 
    oggetto1DisplayObject DisplayObject(foto1)
        
    setChildIndex(oggetto1,livello-1);
    }
    function 
    esegui2(evento:MouseEvent):void
    {
        var 
    oggetto2DisplayObject DisplayObject(foto2)
        
    setChildIndex(oggetto2,livello-1);
    }
    function 
    esegui3(evento:MouseEvent):void
    {
        var 
    oggetto3DisplayObject DisplayObject(foto3)
        
    setChildIndex(oggetto3,livello-1);


    ciao

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    ciao,

    quindi se ho capito bene, per cambiare la disposizione dei livelli il comando è setChildIndex?
    e quel livello-1 tra parentesi che sta ad indicare? il - è un "meno" o un "trattino"?

  4. #4
    Utente di HTML.it L'avatar di Sleter
    Registrato dal
    Aug 2005
    Messaggi
    465
    Originariamente inviato da American
    quindi se ho capito bene, per cambiare la disposizione dei livelli il comando è setChildIndex
    Ciao

    livello-1 è un 'meno'.

    In effetti il termine 'livello' che ho usato non è il più adeguato perchè con swapChildren e setChildIndex non stiamo parlando di "livelli fisici" come quelli che si vedono nella rappresentazione grafica dell'interfaccia di Flash ma piuttosto parliamo di Indice di visualizzazione di una DisplayObjectContainer ovvero: l'indice di visualizzazione di un oggetto posizionato sullo stage o su un altro contenitore.

    Si tratta quindi di un concetto logico simile a quello dei livelli ma viene definito con una lista a indici numerici che ne determinano l'ordine sequenziale con cui vengono visualizzati gli oggetti nel FlashPlayer.

    Con questo sistema, più gestibile in runtime e meno rigido di una disposizione su livelli "fisici" puoi avere un oggetto posizionato sotto un numero indefinito di oggetti e portarlo in 1° piano nella lista di visualizzazione a prescindere dal livello o dalla profondità in cui si trova.



    ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    412
    Quindi se ho capito bene, parliamo di questo tipo di "livelli"





    Ad esempio, il rettangolo e il cerchio sono due oggetti/istanze presenti su uno stesso livello. Il rettangolo si trova tuttavia SOTTO il cerchio. Tramite il codice actionscript (il secondo) che mi hai gentilmente steso, cambiamo la predisposizione delle due istanze, in modo che quella che andiamo a richiamare passa in primo piano rispetto a l'altra.

    Ora devo studiarmi un po' il codice per capire da un punto di vista logico come funziona la cosa. Se ho capito bene, il segreto per portare tutto in primo piano è nella sintassi "livello-1". E all'avvio dell'animazione, che valore ha inizialmente la variabile "livello"?

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 © 2025 vBulletin Solutions, Inc. All rights reserved.