Foros Programación Cliente

Actionscript: problema duplicar clip con contenido dinámico

8 8 Respuestas Viernes 6 de agosto, 2004
a ver, para simplificar primero el codigo:

_root.createEmptyMovieClip("vacio_mc", 0);
// creo un clip de película vacío

_root.vacio_mc.loadMovie("imagenes/prueba1.jpg");
// cargo una imagen dentro

_root.vacio_mc.duplicateMovieClip("vacio2_mc", 1);
// duplico el clip vacío (¿con la imagen dentro? NOOOOOOO)

_root.vacio2_mc._x += 100;
// lo muevo 100 px a la izquierda simplemente para ver si realmente se ha duplicado correctamente


ok, según esto, debería salirme en el Stage la misma foto duplicada 100 px más a la derecha. Sin embargo, resulta que el clip duplicado no "hereda" los contenidos del original...

¿estoy haciendo algo mal o es q realmente no duplica el contenido?
juraría que lo he hecho alguna vez, pero no lo veo.

He probado con un clip creado a mano y tampoco, es decir, si tiene contenido creado a mano si lo duplica, pero si es cargado dinámicamente nasti... ¿Realmente llevo sobreviviendo todo este tiempo sin haber hecho esto? No me lo puedo creer, así que encontradme el fallo please.

Gracias Miles.
Registrado desde 21/03/04
Número de posts: 558
  • Avatar de XrV XrV Registrado desde 22/11/02 / Número de posts: 540
    hay un pequeño retraso a la hora de cargar la imagen, usa un bucle para asegurarte que la imagen ha sido cargada, pe:

    if(_root.vacio.getBytesLoaded()>512){
    //se ha iniciado la descarga
    if(_root.vacio.getBytesLoaded()==_root.vacio.getBytesTotal()){
    //se ha cargado, duplica yesoooowww
    }
    }
    Publicado hace 8 años
  • Avatar de laminimal laminimal Registrado desde 21/03/04 / Número de posts: 558
    no way, mate.

    el código que he puesto ha sido para simplificar, pero en la peli original tiene precarga (de hecho se cargan varias imágenes y el clip no se -intenta- duplicar hasta q no están cargadas todas)

    voy a probarlo no obstante, pero creo q no van por ahí los tiros... :(

    <edit> pero gracias eeeeh :D </edit>
    Publicado hace 8 años
  • Avatar de laminimal laminimal Registrado desde 21/03/04 / Número de posts: 558
    vaya, q post más interesante!!

    me pregunto si alguien de los que están por aquí conectados tendrá una respuesta. mmmmmmm

    ;)
    Publicado hace 8 años
  • Avatar de Roberto Merino Roberto Merino Registrado desde 24/03/07 / Número de posts: 1
    Tengo el mismo problema, necesito alguna forma de descargar solo una vez las imagenes para despues hacerles algun attach al destino que necesito, ya que consume muchos recursos hacer el loadMovie() y le quita el smooth feel a mi aplicacion... :-(

    Sera que hay una forma de cargar las imagenes a la "bibleoteca" para despues utilizarlas simplemente con un attachMovie???, seria interesante que implementen esa funcion...
    Publicado hace 5 años
  • Avatar de psycho psycho Registrado desde 20/05/04 / Número de posts: 297
    Retomo este post, ya que me he encontrado con este problema justo ahora.
    Resulta que no se puede duplicar un clip de película si se ha cargado dinámicamente // loadMovie o MovieClipLoader.
    Mirando la documentacion de Adobe me he encontrado con esto:
    Si ha utilizado MovieClip.loadMovie() o la clase MovieClipLoader para cargar un clip de película, el contenido del archivo SWF no se duplica. Esto significa que no puede ahorrar ancho de banda cargando un archivo JPEG, GIF, PNG o SWF y duplicando posteriormente el clip de película.
    Rebuscando, he encontrado esta solucion, utilizando BitmapData:
    http://mrsteel.wordpress.com/2007/03/12/duplicate-movieclip-with-bitmapdata/
    Por si alguien se ha encontrado con lo mismo.
    //////////////////////
    ///////////// blog
    /////////// twitter
    Publicado hace 3 años
  • Avatar de psycho psycho Registrado desde 20/05/04 / Número de posts: 297
    Hay que ir al tanto a la hora de usar BitmapData, ya que si tienes un clip, escalado al 80% te coje el tamaño escalado pero pinta con el tamaño real:
    He echo un apañillo cutrongo para eso:
    public static function duplica_mc(mc:MovieClip, mc2:MovieClip) {
    var tam:Array = [mc._width,mc._height]
    //---
    mc._xscale = mc._yscale = 100
    //---
    var mcBMP:BitmapData = new BitmapData(mc._width, mc._height, true, 0);
    mcBMP.draw(mc);
    mc2.attachBitmap(mcBMP, mc2.getNextHighestDepth(), "auto", true);
    //---
    mc._width = tam[0]
    mc._height = tam[1]
    }
    //////////////////////
    ///////////// blog
    /////////// twitter
    Publicado hace 3 años
  • Avatar de juancho juancho Registrado desde 12/11/08 / Número de posts: 16
    Aquí mi aporte... en un trabajo que hice debía aparecer una sucesión de fotos con su reflejo.

    Creé un clip que exporté para AS como "foto" y creé esta función:

    function cargar_foto(foto) {
    attachMovie("foto","foto_mc",fot_level,{_x:posX_foto, _y:posY_foto});
    duplicateMovieClip(foto_mc, "reflejo_mc", fot_level-1);
    reflejo_mc._y = foto_mc._y+foto_mc._height*2-10;
    reflejo_mc._yscale = -100;
    reflejo_mc._visible = false;
    foto_mc._visible = false;
    maskReflex_mc._visible = false;
    //
    var loadListener:Object = new Object();
    loadListener.onLoadStart = function(target:MovieClip):Void {
    attachMovie("espera_porcentaje","espera_mc",90,{_x:295.1, _y:171.6});
    };
    loadListener.onLoadProgress = function(target:MovieClip, bytesLoaded:Number, bytesTotal:Number):Void {
    //porcentaje = Math.floor((bytesLoaded*100)/bytesTotal);
    espera_mc.texto_txt.text = porcentaje+"%";
    };
    loadListener.onLoadInit = function(target:MovieClip) {
    if (foto_mc.cargador_mc._width<foto_mc.cargador_mc._height) {
    foto_mc.cargador_mc._x = 182.5;
    } else {
    foto_mc.cargador_mc._x = 0.0;
    }
    foto_mc._visible = true;
    fotoAnterior_mc.removeMovieClip();
    reflejo_mc.cargador_mc._x = foto_mc.cargador_mc._x;
    reflejo_mc._visible = true;
    maskReflex_mc._visible = true;
    reflejo_mc.cacheAsBitmap = true;
    reflejo_mc.setMask(maskReflex_mc);
    reflejoAnterior_mc.removeMovieClip();
    espera_mc.removeMovieClip();
    };
    var mcLoader:MovieClipLoader = new MovieClipLoader();
    mcLoader.addListener(loadListener);
    mcLoader.loadClip(foto,foto_mc.cargador_mc);
    mcLoader.loadClip(foto,reflejo_mc.cargador_mc);
    }


    Lo que hago es importar al escenario un clip y duplicarlo para, inmediatamente, ocultarlos. Cargo una imagen y cuando está lista muestro el clip y el duplicado (al que le aplico una máscara de fundido).

    NOTA: Para que no haya saltos mientras se cargan las imágenes lo que hago, antes de ejecutar la función, es renombrar y mover de nivel el clip y su duplicado un punto hacia arriba. (Luego, como se puede ver, los elimino en la función).
    Dame un Tween y moveré el mundo
    Publicado hace 3 años
  • Avatar de juancho juancho Registrado desde 12/11/08 / Número de posts: 16
    Por cierto... me acabo de fijar... el hilo original es de los tiempos de las cavernas... XD
    Dame un Tween y moveré el mundo
    Publicado hace 3 años