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:
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.
_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.
-
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
}
} -
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> -
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
;) -
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... -
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:
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. -
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]
} -
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 -
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... XDDame un Tween y moveré el mundo
Áreas Domestika
- Diseño (gráfico, web, industrial, producto)
- Programación (cliente, servidor, accesibilidad)
- Ilustración (autores, inspiración, técnicas)
- Fotografía (técnica, equipo, autores)
- Motion Graphics (showreels, software, estudios)
- Publicidad (campañas, anuncios, ideas)
- Informática (software, hardware, trucos)
- 3D (técnicas, iluminación, modelado)
- Experiencia de Usuario (usabilidad, AI, HCI)
- Cine, vídeo y televisión (críticas, producción)
- Música y Audio (sonidos, loops, discos)
- Espacios (arquitectura, interiorismo)