Comunidad de diseño web y desarrollo en internet online

duplicateMovieClip dentro de onLoadInit

Citar            
MensajeEscrito el 06 Oct 2007 07:30 pm
Buenas. Tengo una función on loadInit que llama a otra función en la root que debe duplicar el movieClip donde se ha cargado el contenido (función mirror). Ahí va el código:

Código :

var easingvelo:Number = new Number (3);
var limit:Number = new Number (200);
var max:Number = new Number (8);
var margin:Number = new Number (15);
var zone:Number = new Number (200);
var yline:Number = new Number (130);
var yalign:String = new String ("down");
var textos:Array = new Array ("Honda Super Sport. Pintura metalitzada color plata, ABS, direcció asistida, ESP, fars de xenó.");
var num:Number = new Number ();
function recieve () {
   //on Loaded
   create (22);
}
function create (nm) {
   num = nm;
   createEmptyMovieClip ("clips", getNextHighestDepth ());
   var props:Object = new Object ();
   props._x = 0;
   if (yalign == "down") {
      props._y = yline - 45.2;
   } else if (yalign == "up") {
      props._y = yline;
   } else {
      props._y = yline - (45.2 / 2);
   }
   for (i = 0; i < num; i++) {
      clips.attachMovie ("clip", "clip" + i, clips.getNextHighestDepth (), props);
      props._x += 70;
   }
   desc.swapDepths (getNextHighestDepth ());
   loadClips ();
}
function loadClips () {
   for (i = 0; i < _root.num; i++) {
      with (_root.clips["clip" + i]) {
         var loader:MovieClipLoader = new MovieClipLoader ();
         var listener:Object = new Object ();
         listener.onLoadInit = function (target:MovieClip) {
            _root.mirror (target);
            num = Number (_name.charAt (4) + _name.charAt (5));
            target._width /= 2.5;
            target._height /= 2.5;
            target._parent.onEnterFrame = function () {
               if (num > 0) {
                  if (_root.clips["clip" + (num - 1)]._alpha == 100) {
                     this._alpha += 20;
                  }
               } else {
                  this._alpha += 20;
               }
               if (this._alpha > 100) {
                  this._alpha = 100;
                  if (num == _root.num - 1) {
                     _root.motion ();
                  }
                  delete this.onEnterFrame;
               }
            };
         };
         listener.onLoadError = function (target:MovieClip) {
            num = Number (_name.charAt (4) + _name.charAt (5));
            trace ("Load error on image " + num);
            //carrega informacio i agafa imatge genèrica
            target._parent.attachMovie ("loadError", "loadError", target.getNextHighestDepth ());
            target._parent.loadError._width /= 2.5;
            target._parent.loadError._height /= 2.5;
            target._parent.onEnterFrame = function () {
               if (num > 0) {
                  if (_root.clips["clip" + (num - 1)]._alpha == 100) {
                     this._alpha += 20;
                  }
               } else {
                  this._alpha += 20;
               }
               if (this._alpha > 100) {
                  this._alpha = 100;
                  if (num == _root.num - 1) {
                     _root.motion ();
                  }
                  delete this.onEnterFrame;
               }
            };
         };
         loader.addListener (listener);
         loader.loadClip ("fotos/foto" + i + ".jpg", container);
      }
   }
}
function mirror (target) {
   target.duplicateMovieClip ("dupli", 1000);
   with (target._parent.dupli) {
      _alpha = 50;
      _yscale = -100;
      _y += _height * 2;
   }
}
function motion () {
   var dif:Number = new Number ();
   var velo:Number = new Number ();
   var obj:Number = new Number ();
   _root.onEnterFrame = function () {
      scale ();
      velo = (_xmouse < 502) ? dif / 502 * max : -(dif / 502 * max);
      dif = Math.abs (502 - _xmouse);
      if (dif < zone) {
         velo = 0;
      }
      obj += velo;
      if (obj > 0) {
         obj = 0;
      } else if (obj < -(clips._width - Stage.width)) {
         obj = -(clips._width - Stage.width);
      }
      if (clips._width > Stage.width) {
         clips._x += (obj - clips._x) / easingvelo;
      } else {
         clips._x += ((Stage.width / 2 - clips._width / 2) - clips._x) / easingvelo;
      }
   };
}
function scale () {
   for (i = 0; i < num; i++) {
      with (clips["clip" + i]) {
         distancia = Math.abs (_x + _width / 2 - _parent._xmouse);
         if (distancia < _root.limit) {
            xobj = 100 + ((_root.limit - distancia) * 150 / _root.limit);
         } else {
            xobj = 100;
         }
         _xscale = _yscale += (xobj - _xscale) / _root.easingvelo;
         if (_root.yalign == "down") {
            clips["clip" + i]._y = yline - clips["clip" + i]._height;
         } else if (_root.yalign == "up") {
            clips["clip" + i]._y = yline;
         } else {
            clips["clip" + i]._y = yline - clips["clip" + i]._height / 2;
         }
      }
   }
   adjust ();
}
function adjust () {
   for (i = 1; i < num; i++) {
      clips["clip" + i].obj = clips["clip" + (i - 1)]._x + clips["clip" + (i - 1)]._width + margin;
      with (clips["clip" + i]) {
         _x += (obj - _x) / _root.easingvelo;
      }
   }
   description ();
}
function description () {
   for (i = 0; i < num; i++) {
      if (clips["clip" + i].hitTest (clips._xmouse, clips._ymouse, true)) {
         desc.tex = textos[i];
      }
   }
}
recieve ();

El problema es que no se produce el duplicateMovieClip, no me copia el clip...:(
Alguién me puede ayudar?

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

firefox
Citar            
MensajeEscrito el 07 Oct 2007 07:28 pm
Ya que estamos: ¿què diferencia hay entre duplicateMovieClip i MovieClip.duplicateMovieCLip ?

Gracias.....:(

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

firefox
Citar            
MensajeEscrito el 09 Oct 2007 08:43 pm
Ya se que es miserable autocontestarse y que tambien lo es pretender que lean tanto codigo, pero esta vez es una emergencia. :( Nadie me puede ayudar...

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

firefox
Citar            
MensajeEscrito el 12 Oct 2007 02:16 pm
A mi me pasa algo muy parecido, cuando meto funciones por el medio pasan cosas raras :(

Por Dastaro

1 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Oct 2007 03:07 pm
No uses onLoad, se ejecuta muy raras veces en un proceso.
duplicateMovieClip se puede usar de dos formas:

Código :

duplicateMovieClip(objeto_a_duplicar, nombre_de_instancia, profundidad);

Código :

nombre_de_pelicula.duplicateMovieClip(nombre_de_instancia, profundidad);

Por The Fricky!

Presidente

6168 de clabLevel

3 tutoriales
8 articulos

Genero:Masculino   Bastard Operators From Hell Héroes

Piccola Venezia...

firefox
Citar            
MensajeEscrito el 13 Oct 2007 08:30 am
Te refieres a onLoadInit i a onLoadError ? SI no debo usarlos cómo lo hago entonces?
*Pero las demás sentencias dentro del onLoadInit si se ejecutan

Gracias;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

firefox
Citar            
MensajeEscrito el 14 Oct 2007 03:32 pm
Un caso y ejemplo muy interesante; yo tambien tuve problemas parecidos con este tipo de funciones...
¿Alguien nos ilumina con su saber?

Por Linus

0 de clabLevel



 

msie7
Citar            
MensajeEscrito el 14 Oct 2007 11:24 pm
Si no recuerdo mal, duplicateMovieClip no funciona con contenido cargado. Mejor haz un clip on el código de lo que quieres que cargue y usa attachMovie.

Una forma de utilizar dupicateMovieClip es una función global del player (que viene de la versión 4 y no tiene mucho sentido en as2) y se usa de la forma duplicateMC(elClipQueVasADuplicar, ... );

La otra es una función de la clase MovieClip que se usa de la forma elClipQueVasADuplicar.duplicateMC(...);

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 15 Oct 2007 10:12 am
Pero cómo attachMovie? Si no lo cargo de la biblioterca, sinó del servidor con movieClipLoader

Gracias

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 15 Oct 2007 06:16 pm
Cuando cargas algo con flash, solo se carga una vez, después, cuando pides esa url, se carga lo del principio, que está en la caché. Simplemente debes hacer un mc que cargue el contenido en su propio código.

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 16 Oct 2007 01:17 pm
Pero usando movieClipLoader?
Muchas gracias por la peciencia;)

Por ferranpujol

177 de clabLevel



 

Mataró (Barcelona), España

msie
Citar            
MensajeEscrito el 18 Oct 2007 08:59 am
¿Y no hay ninguna manera de duplicar un MovieClip cargado? Quizás con alguna classe no nativa....

Bueno el tema.

Por Dastaro

1 de clabLevel



 

msie
Citar            
MensajeEscrito el 10 Abr 2009 02:40 am
Muy interesante el tema, la pregunta quedo sin contestar del todo, un movieclip cargado de la web con moviecliploader no se puede attach ni duplicar???

La solucion, algo mas engorrosa, evidente que seria hacer un moviecliploader - o un loadMovie simple - para el clip que necesita la duplicacion o attach, moviecliploader - o loadMovie - como ya lo tiene en cache, lo cargara rapido, pero no casi instaneamente, y es menos elegante el codigo, una pena que no se pueda duplicateMoviecClip o attachMovie de un MovieClip cargado... Pues eso parece ser asi, a no ser que alguien de lso gurus, longeVie por ejemplo, nos de algun detalle!!!

Saludos...

Por Javier Reinoso

52 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.