Actionscript: problema duplicar clip con contenido dinámico
a ver, para simplificar primero el codigo:
<code>
_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
</code>
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.
juancho
Por cierto... me acabo de fijar... el hilo original es de los tiempos de las cavernas... XD
juancho
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:
[code]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._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 reflejoanterior_mc.removemovieclip espera_mc.removemovieclip var moviecliploader mcloader.addlistener mcloader.loadclip lo que hago es importar al escenario un clip y duplicarlo para inmediatamente ocultarlos. cargo una imagen cuando est lista muestro el duplicado le aplico m de fundido no haya saltos mientras se cargan las im antes ejecutar la funci renombrar mover nivel su punto hacia arriba. como puede ver los elimino en mcloader:moviecliploader="new" nota:=""></foto_mc.cargador_mc._height>
psycho
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]
}
psycho
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:
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.
robertomerino
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...
jesusgollonet
vaya, q post más interesante!!
me pregunto si alguien de los que están por aquí conectados tendrá una respuesta. mmmmmmm
;)
jesusgollonet
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>
xrv
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
}
}