Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Nome istanza dinamico

  1. #1

    Nome istanza dinamico

    Dunque, diciamo che io ho uno stage con un riquadro contenente un testo e una foto. Sopra ho 5 pulsanti che hanno quest'effetto:
    -chiudono il riquadro con il testo e la foto (con animazioni della libreria greensock)
    -fanno sparire foto e testo (sempre con le suddette animazioni)
    -riaprono il riquadro (idem)
    -fanno riapparire foto e testo (purem)

    Premetto che utilizzando una libreria per le animazioni tutto il mio filmato è su un solo frame. Quindi per cambiare foto e testo non utilizzerò il gotoandplay ma cambierò l'alpha e altri parametri delle istanze.


    Ora, come faccio a chiudere la foto e il testo attualmente visibili senza utilizzare codice inutile?

    Mi spiego meglio. Io potrei far sparire con il codice tutte le foto e tutti i testi tranne quello che devo attivare, ma ci vorrebbero 10 righe di codice ogni volta.

    Invece l'ideale sarebbe dichiarare quale foto è attiva quando clicco su un pulsante così che quando la dovrò chiudere lo farò con una sola riga di codice.

    Come faccio a "dire a flash" quale di queste istanze è attiva? Solo con una variabile da interrogare tramite if?

    Oppure posso in qualche modo dare un nome dinamico ad un istanza (nell'as) così da effettuare l'animazione su quella attiva?

    Io ho provato con:

    codice:
    var variabile = "home";	
    
    TweenLite.to(["foto"+variabile], 0.8, {alpha:0});
    Ma non funziona.


    Suggerimenti?

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

    Puoi usare la proprietà .target per identificare l'oggetto che ha attivato l'evento e per evitare inutili righe di codice puoi creare un ciclo for che identifica l'oggetto in realzione agli indici di un Array:

    Esempio:

    Codice PHP:
    import com.greensock.*; 
    import com.greensock.easing.*;

    var 
    listaPulsanti:Array = new Array(pulsante1,pulsante2,pulsante3);

    for (var 
    i:uint 0listaPulsanti.length++)
    {
        
    listaPulsanti[i].addEventListener(MouseEvent.MOUSE_OVERover);
        
    listaPulsanti[i].addEventListener(MouseEvent.MOUSE_OUTout);
    }
    function 
    over(evento:MouseEvent):void
    {
        
    trace(evento.target.name);
        
    TweenLite.to(evento.target0.8, {alpha:0});
    }
    function 
    out(evento:MouseEvent):void
    {
        
    trace(evento.target.name);
        
    TweenLite.to(evento.target0.8, {alpha:1});

    Con la proprietà .name in questo caso non ci fai nulla perchè è una proprietà 'stringa' e la Tween deve interagire con un oggetto MovieClip, non con il suo nomeIstanza.



  3. #3
    Intanto ti ringrazio per la pronta risposta con tanto di esempio che utilizza la libreria greensock!
    E' molto utile ma il problema è che nel mio caso le animazioni non agiscono sul movieclip che ha il listener.

    In pratica ho un riquadro pulsante, con sopra una scritta, con sopra quello che io chiamo un "over" (in pratica una copia del riquadro ma con l'alpha a 0).

    L'over ha il listener e quindi causa l'animazione, ma le animazioni sono ogni volta 2 (una rende il riquadro trasparente, l'altra rende la scritta gialla con glow bianco.
    Perché io amo complicarmi la vita

    codice:
    function storiaover(event:MouseEvent):void{
    	TweenLite.to(tastostoria, 0.8, {alpha:0});	
    	TweenMax.to(scrittastoria, 0.8, {tint:0xffff00, tintAmount:1, glowFilter:{color:0xffffff, alpha:1, blurX:5, blurY:5, strength:0.5}});
    }
    Per questo avrei bisogno di un modo di definire dinamicamente il nome di un istanza...
    così potrei dire: se ho cliccato su home l'animazione viene applicata su tastohome, se ho cliccato su storia l'animazione viene applicata su tastostoria e così via...



    Originariamente inviato da Sleter
    Ciao

    Puoi usare la proprietà .target per identificare l'oggetto che ha attivato l'evento e per evitare inutili righe di codice puoi creare un ciclo for che identifica l'oggetto in realzione agli indici di un Array:

    Esempio:

    Codice PHP:
    import com.greensock.*; 
    import com.greensock.easing.*;

    var 
    listaPulsanti:Array = new Array(pulsante1,pulsante2,pulsante3);

    for (var 
    i:uint 0listaPulsanti.length++)
    {
        
    listaPulsanti[i].addEventListener(MouseEvent.MOUSE_OVERover);
        
    listaPulsanti[i].addEventListener(MouseEvent.MOUSE_OUTout);
    }
    function 
    over(evento:MouseEvent):void
    {
        
    trace(evento.target.name);
        
    TweenLite.to(evento.target0.8, {alpha:0});
    }
    function 
    out(evento:MouseEvent):void
    {
        
    trace(evento.target.name);
        
    TweenLite.to(evento.target0.8, {alpha:1});

    Con la proprietà .name in questo caso non ci fai nulla perchè è una proprietà 'stringa' e la Tween deve interagire con un oggetto MovieClip, non con il suo nomeIstanza.



  4. #4
    Allora, ho fatto così:


    Prima dichiaro:

    codice:
    var sezatt = "home"; // la "sezione attiva" sarà home
    var sezina = ""; // la "sezione in apertura" per il momento è vuota
    e poi

    codice:
    function storiaclick(event:MouseEvent):void{
    	sezina = "storia";
    	aprichiudi(); // chiamo la funzione aprichiudi
    
    }
    
    function aprichiudi():void{
    	TweenLite.to(frame, 0.8, {alpha:0,x:61.5, y:393.0, width:13.1, height:378.0});
    	switch(sezatt){ // verifico qual'era la sezione attiva e faccio sparire gli elementi della sezione
    		case "home":
    			TweenLite.to(fotohome, 0.4, {alpha:0,rotation:-45});
    			TweenLite.to(testohome, 0.4, {alpha:0});
    		break;
    		case "storia":
    			TweenLite.to(fotostoria, 0.4, {alpha:0,rotation:-45});
    			TweenLite.to(testostoria, 0.4, {alpha:0});
    		break;
    	}
    	TweenLite.to(frame, 0.8, {alpha:1,x:447.9, y:393.0, width:786.0, height:378.0, delay:0.8});	
    	switch(sezina){ // verifico qual'è la sezione in attivazione e faccio comparire gli elementi della sezione
    		case "home":
    			TweenLite.to(fotohome, 0.4, {alpha:1,rotation:0, delay:1});
    			TweenLite.to(testohome, 0.4, {alpha:1, delay:1.2});			
    			sezatt="home";
    		break;
    		case "storia":
    			TweenLite.to(fotostoria, 0.4, {alpha:1,rotation:0, delay:1});
    			sezatt="storia";
    		break;
    	}
    
    
    }

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.