• User

    Sfocatura a seconda del soggetto selezionato

    ciao,
    tempo fa avevo visto un sito che però ora non trovo + ( :()::():) in cui c'era un effetto molto bello che vorrei riprodurre..
    in pratica vi era una foto con + oggetti in primo piano. A seconda dell'oggetto su cui ci si spostava col cursore il resto, compreso lo sfondo, sfocava creando un piacevole effetto che metteva in evidenza appunto il soggetto scelto..

    saprei come farlo (credo :D) xò magari qualcuno ha un sito simile o un sample in quanto devo farlo vedere a terzi così evito di fare una cosa che poi magari non userò.. grazie!


  • Super User

    Ciao simoegio e benvenuto nella sezione Flash del forum GT 🙂

    Io non ho niente di pronto di quello che ti serve però dovresti lavorare con una scrollbar ed il filtro blur, il tutto utilizzando Actionscript.


  • User

    grazie del benvenuto e della risposta :D:D

    inizierò a guardarmi quei 2, perchè il realtà è un pò che non uso flash e sono un pò arrugginito.. sapevo del filtro blur appunto xò ho provato in modo "visuale" e ho visto che si poteva usare solo per sfocare ma muovendo l'immagine, cosa che io non volevo. Quindi pensavo non si potesse sfocare e basta e avevo pensato di fare 2 versioni dell'immagine, una sfocata una no con Photoshop e scambiarle..

    xò appunto sn un pò arrugginito 😉

    ora mi guarderò secondo i tuoi suggerimenti..
    la scrollbar ora cm ora non mi viene in mente quale sia ma ci guardo :vaiii:
    ciao!


  • Super User

    La tua idea di creare per ogni immagine un blur diverso e poi scambiarle ad un dato evento mi sembra valida 🙂

    L'uso della scrollbar comporterebbe una logica più complessa, dovresti lavorare con Actionscript e le proporzioni.


  • User

    ah.. ovvio che con gli scrip sarebbe più complessa xò dato che è un applicazione che sarà x il web sarebbe un bel vantaggio caricarmi 1na immagine e poi usare scritp che caricarmene varie versione con i soggetti senza o con blur..

    boh.. appena ho tempo ci provo e valuto sul campo:figo::figo:


  • User

    ho trovato per ora http://www.ffiles.com/flash/menus/menublur/ che mi sembra un buon punto di partenza..

    riporto il codice originale

    import flash.filters.BlurFilter; 
    MovieClip.prototype.flou=function(){
    	var f:BlurFilter=new BlurFilter(5,5,2);
    	this.filters=;
    		this.onEnterFrame=function(){
    			this.onRollOver=function(){
    				this.val=true;
    			}
    			this.onRollOut=function(){
    				this.val=false;
    			}
    			if(this.val){
    				f.blurX-=.2;
    				if(f.blurX<0) f.blurX=0;
    				f.blurY=f.blurX;
    				this.filters=;
    			}
    			else{
    				f.blurX+=.2;
    				if(f.blurX>5) f.blurX=5;
    				f.blurY=f.blurX;
    				this.filters=;
    			}
    				
    		}
    }
    
    
    var liste:Array=["item 1", "item 2", "item 3", "item 4"]
    for(var i:Number=0; i<4; i++){
    	var mc:Array=attachMovie("item", "item"+i, i);
    	mc._y=40;
    	mc._x=60+i*95;
    	mc.label.text=liste*;
    	mc.flou();
    }
    

    diciamo tutto abbastanza chiaro, mi sono letto nel manuale quello che nn sapevo e ok..

    ora io dovrei invertire. cioè di base tutti e 4 i pulsanti nitidi e, quando uno va ad esempio su 1, far sfocare 2 3 4..

    prima cosa ho messo if(!this.val) al posto if(this.val) in modo tale che inizi nitido.. funziona diciamo a metà xkè per un primo istante è offuscato, poi si schiarisce. Ho provato a commentare this.filters=; ma non capisco xkè parta cmq sfocato.. ma è roba di poco conto..

    ho pensato allora di fare un for e sostituire this.filters=; all'interno degli if con appunto il filtro applicato ai rimanenti oggetti. Detto in codice

    
    			for (var j:Number=0;j<4;j++)
    			{
    			        if (this._name!= "item"+j)
    				{
    					eval("item"+j).filters=;		
    				}
    			}
    
    ```per il pulsante 1 funziona, cioè se vado su uno i rimanenti 2 3 4 si offuscano...
    
    
    xò se vado su 2 solo 1 si offusca e se vado su 3 4 nn accade nulla :nonono::x
    
    la cosa mi pare molto illogica.. nn capisco cosa  mi sfugga :()::():

  • Super User

    Con tutto il rispetto per il creatore di quello script, è uno script obsoleto (infatti usa prototype) ma soprattutto c'è un errore madornale: mettere gli eventi rollOver e rollOut sotto intervallo enterFrame.

    Ti ho creato uno script che credo faccia al caso tuo:
    [flash]http://www.flepstudio.net/GT/blur.swf[/flash]

    
    import flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc);
    for(var i:Number=0;i<clips_array.length;i++)
    {
     getBlur(clips_array*);
     clips_array*.onRollOver=function(Void):Void
     {
      this.filters=[];
     }
     clips_array*.onRollOut=function(Void):Void
     {
      getBlur(this);
     }
    }
    function getBlur(m:MovieClip):Void
    {
     var blurX:Number=20;
     var blurY:Number=20;
     var quality:Number=3;
     var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
     var filterArray:Array=new Array();
     filterArray.push(filter);
     m.filters=filterArray;
    }
    
    

  • User

    in effetti pure io avevo dei dubbi l'ufficienza dello script xò ho detto.. ho altri punti di partenza.. x cui 🙂

    cmq io, magari mi sono spiegato male, vorrei che quando nessuno è in rollOver siano tutti a fuoco, e solo quando si va in rollOver su di uno gli altri si sfocano

    ora provo da solo, nn so se riesco xò 😛

    poi diciamo che era gradevole quell'effetto di sfocamento nel a gradi, e non tutto insieme


  • Super User

    Io ti ho dato l'input, col mio script potresti fare qualsiasi tipo di effetto.


  • User
    import flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc);
    for(var i:Number=0;i<clips_array.length;i++)
    {
    
    // getBlur(clips_array*);
     clips_array*.onRollOver=function(Void):Void
     {
      this.filters=[];
      for (var j:Number=0;j<4;j++)
      {
              if (eval("clip_"+j+"_mc")._name!=this._name)
            getBlur(eval("clip_"+j+"_mc"));
      }
     }
     clips_array*.onRollOut=function(Void):Void
     {
    
      for (var j:Number=0;j<4;j++)
      {
              eval("clip_"+j+"_mc").filters=[];      
      }
    
     }
    }
    function getBlur(m:MovieClip):Void
    {
     var blurX:Number=20;
     var blurY:Number=20;
     var quality:Number=3;
     var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
     var filterArray:Array=new Array();
     filterArray.push(filter);
     m.filters=filterArray;
    }
    

    ok ora fa ciò che volevo.. solo che non so come fare per fare l'effetto dello scocamento "a gradi"...

    suggerimenti?


  • Super User

    Cosa intendi per sfocamento a gradi ?


  • User

    nel codice di prima, lo sfocamento non avveniva "di colpo" ma graduale. Questo perchè il codice dello sfocamento era nel frame generale x cui continuava ad eseguirlo finchè non arrivava ad un dato valore (mi pare 5)..
    ora invece lo sfocamento avviene immediatamante appunto xkè il codice è nel singolo evento

    basta guardare che è decisamente + facile che spiegarlo :lol:

    grazie ancora eh!;)


  • Super User

    Tieni blurX e blurY fuori dalla funzione.
    Gli dai valore 0.
    Al rollOver della Clip attivi onEnterFrame che chiama la funzione getBlur e aumenta le variabili blurX e blurY 😉


  • User

    mmmm.. avevo fatto la prova ed ero riuscito a far la sfocatura a gradi solo nel rollOver solo che ho perso il file e non riesco + a rifarla :()::bho:

    ho modificato per prova

    i```
    mport flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc);
    for(var i:Number=0;i<clips_array.length;i++)
    {

    // getBlur(clips_array*);
    clips_array*.onRollOver=function(Void):Void
    {
    this.filters=[];
    for (var j:Number=0;j<4;j++)
    {
    if (eval("clip_"+j+"_mc")._name!=this.name)
    {
    this.onEnterFrame=function()
    {
    getBlur(eval("clip
    "+j+"_mc"));
    }
    }
    }
    }
    clips_array*.onRollOut=function(Void):Void
    {

    for (var j:Number=0;j<4;j++)
    {
    eval("clip_"+j+"_mc").filters=[];
    }

    }
    }
    var blurX:Number=0;
    var blurY:Number=0;
    function getBlur(m:MovieClip):Void
    {
    blurX=blurX+3;
    var quality:Number=3;
    var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
    var filterArray:Array=new Array();
    filterArray.push(filter);
    m.filters=filterArray;
    }

    
    xò nn vuole andare e nn mi ricordo come accidenti avevo fatto :? help

  • User

    ok ci siamo...

    import flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc);
    for(var i:Number=0;i<clips_array.length;i++)
    {
    
    
     clips_array*.onRollOver=function(Void):Void
     {
         this.onEnterFrame=function()
        {
             this.filters=[];
            for (var j:Number=0;j<4;j++)
              {
                if (eval("clip_"+j+"_mc")._name!=this._name)
                       getBlur(eval("clip_"+j+"_mc"));
              }
         }
     }
     clips_array*.onRollOut=function(Void):Void
     {
    
      for (var j:Number=0;j<4;j++)
      {
              eval("clip_"+j+"_mc").filters=[];      
            eval("clip_"+j+"_mc").onEnterFrame=false;         
    
      }
    
        blurX=0;
        blurY=0;
     }
    }
     var blurX:Number=0;
     var blurY:Number=0;
     function getBlur(m:MovieClip):Void
    {
        
    if (blurX<5)
    {
         blurX+=.2;
          blurY+=.2; 
    }
    var quality:Number=4;
     var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
     var filterArray:Array=new Array();
     filterArray.push(filter);
     m.filters=filterArray;
    }
    
    1. non so se logicamente è troppo corretto
    2. ho provato a farlo col rollOut ma nn riesco.. coming soon

  • Super User

    Prova questo:

    
    import flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc);
    var blurX:Number=0;
    var blurY:Number=0;
    var quality:Number=3;
    for(var i:Number=0;i<clips_array.length;i++)
    {
     clips_array*.id=i;
     clips_array*.onRollOver=function(Void):Void
     {
      getBlur(this);
     }
     clips_array*.onRollOut=function(Void):Void
     {
      blurX=0;
      blurY=0;
      for(var i:Number=0;i<clips_array.length;i++)
      {
       clips_array*.onEnterFrame=null;
       clips_array*.filters=[];
      }
     }
    }
    function getBlur(m:MovieClip):Void
    {
     m.onEnterFrame=function(Void):Void
     {
      for(var i:Number=0;i<clips_array.length;i++)
      {
       if(i!=this.id)
       {
        var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
        var filterArray:Array=new Array();
        filterArray.push(filter);
        clips_array*.filters=filterArray;
        blurX++;
        blurY++;
        if(blurX>=20)
         this.onEnterFrame=null;
       }
      }
     }
    }
    
    

    tieni il framerate a 31


  • User

    ho fatto un pò d prove..
    allora volevo sapere

    1. il codice "nuovo" è per far la gradazione anche nel roolOver o è solo + corretto rispetto al mio?
      2)se la 1 era xkè è + corretto mi spieghereste i motivi
      3)xkè il frameRate a 31??

    detto ciò, ti ri-ringrazio e ti metto giusto 2 prove che ho fatto. la prima con il mio codice la seconda con il tuo, ovviamente cambiano i parametri di sfocatura ma penso quello vada molto a "gusti"

    (ho provato a farli visualizzare sul forum ma nn c sono riuscito :()::?:bho:)

    Mia versione http://img86.imageshack.us/my.php?image=senzanome1sq7.swf

    Tua versione

    http://img81.imageshack.us/my.php?image=senzanome2lv9.swf


  • Super User

    Ciao,
    i tuoi esempi non riesco a visualizzarli.
    Il mio script l'ho scritto in 2 minuti ed è solo un esempio, un input. Potresti aggiungere svariati effetti una volta che l'hai capito.

    Il mio codice è più corretto perchè è Actionscript 2.0 mentre lo script che hai presentato è in Actionscript 1.0

    Il frame rate a 31 perchè è il miglior frame rate per l'effettistica creata via actionscript.


  • User

    sisi chiaro che è un input.. era x capire..
    x gli esempi mi pare strano. basta che clicchi normalmente sul link, ti apre una pagina di un server estero su cui li ho caricati, a me vanno. Li ho applicati su una foto, con 3 soggetti, magari non avevi capito che era quello l'esempio :lol::lol:

    ora ci lavoro sopra

    grazie!


  • User

    http://img455.imageshack.us/my.php?image=senzanome3qc6.swf

    ecco ciò che volevo ;):)

     import flash.filters.BlurFilter;
    var clips_array:Array=new Array(clip_0_mc,clip_1_mc,clip_2_mc,clip_3_mc);
    var blurX:Number=0;
    var blurY:Number=0;
    var quality:Number=3;
    for(var i:Number=0;i<clips_array.length;i++)
    {
        clips_array*.id=i;
         
        clips_array*.onRollOver=function(Void):Void
         {
             if (this._name!="clip_3_mc") 
                  getBlur(this);
         }
        
         clips_array*.onRollOut=function(Void):Void
         {
              for(var i:Number=0;i<clips_array.length;i++)
              {
                   if(i!=this.id)
                   {
                       Ripristina(this);
                }
              }
         }
    }
    
    function getBlur(m:MovieClip):Void
    {
         m.onEnterFrame=function(Void):Void
         {
              for(var i:Number=0;i<clips_array.length;i++)
              {
                if(i!=this.id)
                   {
                    var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
                        var filterArray:Array=new Array();
                    eval("clip_"+i+"_mc").enabled=false;   
                    filterArray.push(filter);
                    clips_array*.filters=filterArray;
                     blurX+=.3;
                      blurY+=.3; 
                    if(blurX>=8)
                             this.onEnterFrame=null;
                   }
              }
         }
    }
    
    function Ripristina(m:MovieClip):Void
    {
        m.onEnterFrame=function(Void):Void
        {
              for(var i:Number=0;i<clips_array.length;i++)
              {
                   if(i!=this.id)
                   {
                    eval("clip_"+i+"_mc").enabled=false;   
                    var filter:BlurFilter=new BlurFilter(blurX,blurY,quality);
                    var filterArray:Array=new Array();
                    filterArray.push(filter);
                    clips_array*.filters=filterArray;
                     blurX-=.3;
                      blurY-=.3; 
                    if(blurX<=0)
                    {
                         this.onEnterFrame=null;
                          for(var j:Number=0;j<clips_array.length;j++)
                        eval("clip_"+j+"_mc").enabled=true;  
                    }
                  }
              }
         }
    }
    

    ho provato ad ottimizzarlo (tra getBlur e Ripristina c'è quasi tt il codice in comune xò se credo una funzione nuova non va..boh)