- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- Sfocatura a seconda del soggetto selezionato
-
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
-
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 :()::():
-
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; }
-
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
-
Io ti ho dato l'input, col mio script potresti fare qualsiasi tipo di effetto.
-
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?
-
Cosa intendi per sfocamento a gradi ?
-
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 eventobasta guardare che è decisamente + facile che spiegarlo
grazie ancora eh!;)
-
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
-
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
-
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; }
- non so se logicamente è troppo corretto
- ho provato a farlo col rollOut ma nn riesco.. coming soon
-
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
-
ho fatto un pò d prove..
allora volevo sapere- 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
- il codice "nuovo" è per far la gradazione anche nel roolOver o è solo + corretto rispetto al mio?
-
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.
-
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'esempioora ci lavoro sopra
grazie!
-
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)