Flash: slide immagini con ingrandimento

Di: Niconero81 | 26/09/2020 18:02:19
Salve ragazzi ho un problema che non riesco a risolvere. devo creare una slide di tot immagini (10 ad esempio) ogni immagine è di cm 6x6. Vorrei creare un effetto, che ogni volta che passo su un immagine si ingrandisce ad esempio diventa cm 10x10 e tutte le altre si rimpiccioliscono 4x4 cm, cosi ogni volta passo su di una si ingrandisce e tutte le altre si rimpiccioliscono, creando un effetto ingrandimento.
Un enorme grazie anticipato.

Risposte



Non ci si può riferire alle dimensioni di un'immagine su schermo usando i centimetri come unità di misura, l'unica unità di misura accettabile sullo schermo è il pixel.
Sembra una pignoleria inutile, ma ti assicuro che non è così, altrimenti non ti avrei corretto.
In ogni caso adesso provo a scrivere un'azione che ti permetta di ottenere il risultato che chiedi, utilizzando una scalatura percentuale... in questo modo le dimensioni saranno calcolate in base alle dimensioni originali delle immagini, così che non è necessario conoscerle in anticipo.
Osservazioni preliminari:
Immagino che la grandezza effettiva delle foto sia la stessa grandezza che le foto hanno quando sono ingrandite (al rollover), se fossero più grandi sarebbe uno spreco: avremmo immagini più grandi di quanto serve; se fossero più piccole non reggerebbero all'ingrandimento, mostrandoci i pixel (brutta cosa).
Quindi l'immagine ingrandita sarà al 100%.
Di conseguenze l'immagine normale (quando non c'è nessun rollover) sarà al 60% e l'immagine piccola sarà al 40%.
Preparazione:
1. Inserisci sullo stage 10 movieclip contenenti le immagini (si può trattare dello stesso simbolo che carica immagini diverse oppure di dieci simboli diversi)
2. Dai un nome ad ogni istanza, seguendo un criterio che ci permetterà di rintracciarla dinamicamente con uno script:
io consiglio "foto1", "foto2", "foto3", ..., "foto10".
Questo perché poi facendo un ciclio da 1 a 10 possiamo comandare tutte le istanze in un solo colpo.
3. Crea un nuovo movieclip che chiameremo "controller" o "movieclipVuoto", non serve nessuna grafica al suo interno, lo useremo per inserire le azioni che comandano tutto.
Spesso è comodo tenere un movieclip vuoto per attaccargli uno script, potremmo ottenere lo stesso risultato con un intervallo di una funzione, ma io trovo comodo questo sistema che mi permette di trovare più velocemente le porzioni di codice che cerco
4. Posiziona un'istanza di questo movieclip sullo stage e assegnagli questo script:
//---------------------------------------------
onClipEvent (enterFrame) {
evidenzia = false;
for (i=1; i<=10; i++) {
if (eval("_root.foto"+i).hitTest(_root._xmouse, _root._ymouse, true)) {
evidenzia = true;
}
}
if (evidenzia) {
for (i=1; i<=10; i++) {
if (eval("_root.foto"+i).hitTest(_root._xmouse, _root._ymouse, true)) {
eval("_root.foto"+i).grandezza = 100;
} else {
eval("_root.foto"+i).grandezza = 40;
}
}
} else {
for (i=1; i<=10; i++) {
eval("_root.foto"+i).grandezza = 60;
}
}
for (i=1; i<=10; i++) {
eval("_root.foto"+i)._xscale = (eval("_root.foto"+i)._xscale+eval("_root.foto"+i).grandezza)/2;
eval("_root.foto"+i)._yscale = eval("_root.foto"+i)._xscale;
}
}
//---------------------------------------------
Chiaramente lo script può essere migliorato, in questo esempio uso quattro volte lo stesso ciclo "for", potrei fare un ciclo solo, ma poi le istruzioni si accavallerebbero e finisce che invece di chiarirti le idee te le confondo...
La prima volta per controllare se con il mouse stai su una foto.
La seconda volta per assegnare 100 alla clip che tocca il mouse e 40 alle altre. (se sei su una foto con il mouse)
La terza volta per assegnare 60 a tutte le clip. (se il mouse non tocca nessuna foto)
La quarta volta per cambiare effettivamente le dimensioni delle clip. (in base ai valori che ho calcolato nel secondo o nel terzo ciclo)

Di: Professore | 26/09/2020 18:03:19

Grande prof!

Mille grazie era proprio l'aiuto che cercavo, ho provato è funziona perfettamente. Un ultimo aiutno se possibile: se quando vado su di una foto(e lei si ingrandisce), come si puo applicare a tutte le altre un effetto luminosità 50%. Cosi ogni volta che vado su di una si ingrandisce senza nessun effetto, e alle restanti viene applicate un effetto luminosita.
Ancora un enorme grazie prof.

Di: Niconero81 | 26/09/2020 18:03:19


Perché invece della luminosità non applichi una semidissolvenza?
Lo dico perché è molto più semplice e puoi utilizzare semplicemente la proprietà _alpha senza essere costretto ad importare la classe ColorMatrixFilter, che meriterebbe pagine e pagine di spiegazione, e poi appesantisci inutilmente lo script.
per usare l'alpha aggiungiamo solo 4 righe al codice già scritto:
onClipEvent (enterFrame) {
evidenzia = false;
for (i=1; i<=10; i++) {
if (eval("_root.foto"+i).hitTest(_root._xmouse, _root._ymouse, true)) {
evidenzia = true;
}
}
if (evidenzia) {
for (i=1; i<=10; i++) {
if (eval("_root.foto"+i).hitTest(_root._xmouse, _root._ymouse, true)) {
eval("_root.foto"+i).grandezza = 100;
eval("_root.foto"+i).opaco = 100;
} else {
eval("_root.foto"+i).grandezza = 40;
eval("_root.foto"+i).opaco = 50;
}
}
} else {
for (i=1; i<=10; i++) {
eval("_root.foto"+i).grandezza = 60;
eval("_root.foto"+i).opaco = 100;
}
}
for (i=1; i<=10; i++) {
eval("_root.foto"+i)._alpha = (eval("_root.foto"+i)._alpha+eval("_root.foto"+i).opaco)/2;
eval("_root.foto"+i)._xscale = (eval("_root.foto"+i)._xscale+eval("_root.foto"+i).grandezza)/2;
eval("_root.foto"+i)._yscale = eval("_root.foto"+i)._xscale;
}
}

Di: Professore | 26/09/2020 18:04:19


mi nteresserebbe questa tipo di filmato..l'ho provato e più o meno funziona.
vorrei sapere se è possibile:
1-mettere l'immagine in primo piano quando ci passo sopra(con quello script l'immagine si ingrandisce, ma non si sovrappone alle altre)
2-far partire l'ingrandimento anche da altra angolature(quello script fa ingrandire le imm ad alto-sx verso basso dx. io volevo tio centrale )

Di: felixyorke78 | 26/09/2020 18:04:19