A menudo puede ocurrir que se crean efectos dinámicos
que necesitan la inclusión de más instancias de una clip; esto haría que
la película fuese demasiado complicada de gestionar. Para evitarlo, se ha introducido
en Flash la action Duplicad Movieclip que, cada vez que se
utiliza, crea un duplicado (una instancia) de la clip especificada como target.
He aquí un ejemplo muy simple:
Cuando se pulsa la tecla DUPLICA se ejecuta la action Duplicad
Movieclip además de la formulación de otros parámetros que permiten
desplazar la nueva clip duplicada más a la derecha respecto a la original:
On (Release)
Set Variable: "x" = x+1
Duplicad Movie Clip ("/logo", "logo" & x, x)
Set Property ("/logo" & x, X Position) = (GetProperty ( "/logo", _x ) * x)
End On |

Como se ve por la imagen, es fácil entender la sintaxis de laaction.
En el parámetro target incluid el nombre de la clip original que se tiene que duplicar;
en New Name dad el nuevo nombre que debe tener el duplicado y,
para terminar, en Depth asignad un valor numérico de superposición respecto a
la clip original (qué clip tiene que superponerse a otra).
Seguro que se habrá notado que en los parámetros New Name y Depth
no hay valores numéricos, sino valores expression. El motivo hay que
buscarlo en el hecho de que la action carece de valores de este tipo ("dinámicos"),
Duplicad Movleclip sólo tendría
efecto una vez. En efecto, si hubiesemos incluido valores fijos logo1
y 1 respectivamente para New Name y Depth, cada vez
que se eligiese el botón el nuevo duplicado sustituiría al viejo sin
crear uno nuevo. Por esta razon, es necesario incluir valores
dinámicos. En efecto, cada vez que se libera el botón, se genera una clip con
nombre "logo" & x; después logo1 la primera vez; logo2
la segunda; logo3, la tercera, etc. (¿recordáis el uso
del operador & para concatenar más cadenas?) También Depth
asume un valor dinámico que cada vez se va incrementando de unidad en unidad.
La variable x tiene que asumir un nuevo valor
(incrementado de 1) todas las veces que se libere el botón, por eso antes de
ejecutar la action Duplicad Movieclip incluimos:
Set Variable: "x" = x+1
Después, para darle la nueva posición a la clip que se acabe de duplicar, será
necesario utilizar la action Set Property
que asigna un valor a la propiedad X Position (posición horizontal)
de la clip "/logo" & x:
Set Property ("/logo" & x, X Position)
Dado que la posición de la nueva clip varía dinámicamente con el
número liberaciones del bottone, es necesario crear una expresión que permita
desplazar de tot pixel el nuevo duplicado que se haya generado:
GetProperty ( "/logo", _x ) * x
El valor de la posición horizontal de la clip logo
original hay que multiplicarlo por el valor de la variable x.
Para evitar que la primera clip duplicada se superponga a la original (x
tendría valor 0), incluimos
Set Variable: "x" = "1"
en el primer keyframe del movie Flash.
Step by step
Para entender mejor estas instrucciones, hagamos un test "step by step"...
Entonces, se ejecuta la animacion y la variable x adquiere valor 1
(para la action incluida en el primer keyframe).
Cuando el usuario clica en el botón y lo suelta, veamos qué sucede (suponiendo que
la clip logo se haya colocado en posición horizontal igual a
30):
| ACTION |
RESULTADO |
| Set Variable: "x" = x+1 |
2
(da 1+1) |
| Duplicate Movie Clip ("/logo", "logo" & x, x) |
Name: logo2
Depth: 2 |
| Set Property ("/logo" & x, X Position) = (GetProperty ( "/logo", _x )*x) |
60
(da 30*2) |
Por lo tanto, se genera una nueva clip logo2 con valores
"duplicados" del orioginal (posición, nombre y depth).
La segunda vez que se suelta, esto es lo que pasa:
| ACTION |
RISULTATO |
| Set Variable: "x" = x+1 |
3
(da 2+1) |
| Duplicate Movie Clip ("/logo", "logo" & x, x) |
Name: logo3
Depth: 3 |
| Set Property ("/logo" & x, X Position) = (GetProperty ( "/logo", _x ) * x) |
90
(da 30*3) |
y así para cada vez que se suelta el botón.
Remove Movieclip
Con este parámetro, se elimina la clip especificada como target.
Si las clip se han creado dinámicamente, es necesario especificar también
este valor dinámicamente.