Duplicació i generació dinàmica de clips de pel·lícula
 
 
 

L'objectiu d'aquesta pràctica és conèixer els mètodes de què disposa el llenguatge ActionScript per generar còpies dinàmiques d'instàncies de l'objecte movieClip.

 
      
  També introduireu el bucle especial For-In per controlar les instàncies duplicades.  
      
Desenvolupament de la pràctica  
  
El mètode movieClip.duplicateMovieclip us permet especificar una instància d'un símbol clip de pel·lícula i duplicar-la mentre s'està reproduint.
  
» Obriu un arxiu FLA nou.
     
  » Dibuixeu una línia vertical amb una alçada de 200 píxels.  
  
» Convertiu aquesta línia en un clip de pel·lícula i creeu una instància amb el nom de linia.
  
» Afegiu el codi següent a la línia del temps principal al fotograma clau 1.
  
_root.linia.duplicateMovieclip("linia1",1);
  
Aquest mètode duplica la instància del clip linia i li dóna un nom nou linia1, però si executeu la pel·lícula, no visualitzareu dues línies. Això es deu al fet que la còpia nova de la instància hereta les propietats del pare, per tant, ocupa el mateix lloc a l'escenari. Però si comproveu amb el depurador, observareu l'existència de dues instàncies: _level0.linia i _level1.linia1.
  
» Per visualitzar les dues línies, afegiu el codi següent i executeu la pel·lícula.
  
  _root.linia1._x=_root.linia._x+20;  
  
  Una bona forma de crear dinàmicament moltes còpies d'una instància és combinar aquest mètode amb els bucles.  
      
  » Creeu una altra línia a l'escenari.  
      
  » Establiu l'amplada de la línia a 200 píxels.  
      
  » Convertiu aquesta línia en un clip de pel·lícula i creeu una instància amb el nom de liniab.  
     
  » Disposeu els dos clips de pel·lícula perquè tinguin la intersecció en el mateix punt de registre. Utilitzeu el tauler Info per aconseguir una precisió més gran.  
      
 
 
 
Imatge núm. 1
 
 
 
      
  Ara es tracta de convertir aquestes dues línies en una quadrícula utilitzant el mètode que esteu treballant, movieClip.duplicateMovieclip, amb la combinació d'un bucle de repetició finit.  
      
 
     
  » Esborreu tot el codi anterior i afegiu el codi següent a la línia del temps principal, al mateix fotograma clau 1.  
      
  espaix =0;
espaiy =0;

for (var n = 0; n<21; n++) {
_root.linia.duplicateMovieClip("linia"+n, n);
_root.liniab.duplicateMovieClip("liniab"+n, n+100);
eval("linia"+n)._x = eval("linia"+n)._x+espaix;
eval("liniab"+n)._y = eval("liniab"+n)._y+espaiy;

espaix += 10;
espaiy += 10;
}

 
 

 
  Amb aquest codi, primer heu creat dues variables anomenades espaix i espaiy, on deseu el valor numèric de la separació entre les diferents línies duplicades respecte de la línia original o línia pare/mare.  
      
  Aquestes variables seran utilitzades com a comptador amb l'objectiu d'incrementar en deu píxels la ubicació de les línies duplicades a les dues coordenades.  
      
La variable n del bucle s'utilitza per controlar el nombre de duplicacions. Si us hi fixeu, la paraula var és una paraula reservada del llenguatge per indicar que la variable és local i no global. Utilitzeu aquest tipus de variable, ja que, en aquest cas, no la utilitzareu a cap altre lloc del programa.
      
  La concatenació de la cadena linia amb la variable numèrica n s'utilitza per generar els noms nous de les línies (instàncies) duplicades: linia1, linia2, linia...x.  
  
  Si us hi fixeu, el segon paràmetre del mètode duplicateMovieClip és el que correspon al valor n en cada repetició. Aquest és el valor corresponent al nivell de profunditat assignat. Recordeu que dues línies duplicades no poden tenir el mateix nivell, per aquesta raó, quan dupliqueu la líniab, a totes les seves filles els assigneu nivells de profunditat a partir de 100.  
      
  Un altre mètode interessant relacionat amb aquest que esteu treballant és el que permet esborrar les pel·lícules duplicades: movieClip.removeMovieClip.  
      
  Té el mateix funcionament que l'anterior. Si utilitzeu aquest mètode amb el bucle especial For-In d'ActionScript, podreu esborrar totes les pel·lícules duplicades (en el vostre cas, els clips duplicats) sense haver de portar el control del nombre d'instàncies duplicades.  
      
  El bucle For-In es basa en el fet que el Flash controla internament, mitjançant les anomenades matrius associatives, tots els clips de pel·lícula duplicats de l'escenari, és a dir, que quan el Flash fa duplicacions de clips de pel·lícula, els posa en matrius (arrays) molt semblants a les de les dades matemàtiques a la memòria RAM.  
      
  Per posar en pràctica i veure el funcionament del mètode removeMovieClip combinat amb el bucle For-In, afegireu una funció nova al programa que esteu desenvolupant.  
  
»  Creeu un botó a l'escenari i afegiu el codi següent:
 

on (release) {

for (z in _root) {

if (typeof (_root[z]) == "movieclip") {
_root[z].removeMovieClip();
}

}
}

      
  Com podeu observar, aquest bucle utilitza una variable que funciona com un comptador i, al mateix temps, és un índex de la matriu _root[].  
      
  La paraula typeof és un operador que indica el tipus d'objecte. En aquest cas, us interessa portar un control dels objectes de tipus movieClip.  
      
  »  Proveu el funcionament del programa.  
      
 
      
     
  Per finalitzar, us deixem una petita aplicació que utilitza aquestes tècniques que heu practicat. Aquest programa permet que l'usuari/ària pugui escollir el nombre d'unitats de mesura del costat d'un quadrat, i que es pugui visualitzar d'una forma gràfica l'àrea de la figura.  
      
  Intenteu crear-lo per finalitzar la pràctica.  
      
 
      
      
     
     
  Deseu l'arxiu amb el nom duplicatelin.fla.