Comunidad de diseño web y desarrollo en internet online

Un problema raro con duplicateMovieClip();

Citar            
MensajeEscrito el 25 Ago 2011 12:04 pm
¡Buenas gentes! ¿Qué tal? Miren, tengo el siguiente código:

Código ActionScript :

stop();
var e:Array=new Array();
this.createEmptyMovieClip("cosa",1);
e[0]=new MovieClipLoader();
e[0].addListener(this);
e[0].loadClip("tmp/textoBotonera.swf",cosa);
n[0]=0;
onEnterFrame=function(){
   if(cosa.getBytesLoaded(MovieClip)==cosa.getBytesTotal(MovieClip) && cosa.getBytesTotal(MovieClip)!=0 && n[0]==0){
      trace(cosa.getBytesLoaded(MovieClip)+"/"+cosa.getBytesTotal(MovieClip));
      trace(cosa);
      cosa.duplicateMovieClip("jeje",2);
      trace(cosa.CuadroTexto);
      trace(jeje);
      n[0]++;
   };
};

¿Alguien sabe por qué cuando traceo el MovieClip creado con el duplicateMovieClip(); jeje me sale como un error undefined? No lo entiendo, de hecho, hasta el ejemplo de Macromedia viene siendo un loadMovie(); a una imagen externa y sí funciona, y sin embargo esto no hay manera. Muchas gracias gentes. Un saludo.

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Ago 2011 03:01 pm
Dado que lo haces en un onEnterFrame lo sobreescribes continuamente. El código es especialmente rebuscado para algo muy simple, ¿algún motivo para ello?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2011 06:42 pm
¡Buenas solisarg! Cuánto tiempo, jeje. Sí, sí que tiene su motivo, además, le rompo el bucle de tiempo que se genera con el onEnterFrame(); con este algoritmo, de esta manera solo se ejecuta una sola vez con un mínimo consumo de procesador del usuario tras la carga completa, pues cuando uso el famoso onLoadComplete(); me da un error no visual, pero sí curioso, pues te da una vez descargado el elemento, no cuando ya está en proceso, entonces, si quiero hacer referencia a una variable interna o función, éste no funciona, pues solo se descargó, no se cargó, jeje, no sé si me explico pues no es que sepa mucho de esto, pero me pasó varias veces y desde entonces uso este algoritmo, jeje, parece complicarse la vida, pero la verdad que me solucionó la vida, este no falla :D.
El problema que planteo aquí es una cosa que sale SOLO a veces, NO siempre, jeje, pues de alguna de mis pruebas salió dicha idea, y es que cargo un SWF externo con un MovieClip attachado en la biblioteca, ya sea por método loadClip(); loadMovie();, etc. y tras su carga dentro de un MovieClip generado internamente dentro del MovieClip inicial que carga éste secundario, pues attacho el contenido del SWF cargado tantas veces como quiera sin necesidad de recarga, pero no sé porqué, aquí, como en otras muchas ocasiones no sale, y sin mebargo otras veces sí.
Muchas gracias por responder tan pronto y espero haber resuelto tus dudas, así como a ver si podemos resolver la mía jeje. Y no me sacrifiquéis por los códigos raros que uso, jeje. ¡Un saludo! ;)

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Ago 2011 06:46 pm
Ok, una primera cosa: al empezar una precarga, si el flash player todavía no tiene ningún dato de lo que va a cargar porque no ha leído el encabezado, el valor de getBytesLoaded y getBytesTotal es -1 (no 0 como chequeas en tu if), lo usual es chequear que getBytesLoaded sea mayor a 4, que según postulaba el amigo Eliseo, es el peso de un MC vacío.
No se si esa es la causa, pero sin duda es algo que puede pasar cuando lo cuelgas en el servidor

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2011 06:53 pm
Gracias por responder tan rápido solisarg. Bueno, me matas, jeje, no sé que es el encabezado, de todas maneras, hice varias pruebas traceando valores de carga getBytesLoaded(MovieClip); y getBytesTotal(MovieClip);, y éste último me devuelve 12 cuando está generado de serie en Flash el MovieClip y 0 cuando lo genero mediante createEmptyMovieClip();, de ahí esos valores, puede que con ello no halla visto ese detalle del encabezado, jeje, de hecho, no tengo ni idea de lo que es, jeje. No sé si haría algo mal, pero me da eso, sin embargo, una vez cargo como te expliqué antes, funciona todo de maravilla, salvo el detalle de poder attachar elementos internos del SWF, que solo funciona en ciertas ocasiones.

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Ago 2011 07:01 pm
En realidad es difícil que lo compruebes empíricamente, pero si en la documentación y en errores raros. El encabezado de un archivo (en este caso un swf) describe información acerca del mismo, en este caso peso total que es el que usa el Flash Player para calcular la precarga.
La condición debería ser:

if(cosa.getBytesLoaded(MovieClip)==cosa.getBytesTotal(MovieClip) && cosa.getBytesTotal(MovieClip)>0 && n[0]==0)

No se bien que es MovieClip, dado que usas el nombre de una clase.
Con respecto a la calidad del código, no te preocupes (nadie te obliga a escribir mejor código), si es para vos mientras te funcione todo bien .Igual no entendí mucho el objetivo, ¿evitar recargar una movie externa ya cargada?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2011 07:15 pm
Muchas gracias por responderme de nuevo tan rápido y por el apoyo y explicación solisarg :D, desde luego me tienes librado de miles y hecho ver otras tantas con tu ayuda, jeje :D. Te explico la idea inicial y el porqué de este código final.
Para empezar, yo soy un "noob" con esto de la programación, aunque me guste mucho, tengo trabajo, estudios, novia, amigos y participo en skimboard y triatlon, y como es de entender, no tengo mucho time, jeje, entonces hago programillas y sistemas Web que se adaptan en plenitud a mis necesidades, unas veces necesidades para ahorrarme trabajo haciendo cosas y otras veces para ocio puro y duro, por tanto, no soy programador ni por asomo, y menos, experto, jeje. La idea que me planteaba aquí era hacer un sistema de gagets donde hubiera un SWF inicial que cargara todos los elementos externos una sola vez. Dichos SWF externos al original contenían elementos (Gagets) que uniéndolos entre sí, formarían diversos elementos del sistema sin necesidad de programarlos una y otra vez, complementándose los unos con los otros sin necesidad de tenerlos que meter físicamente dentro del SWF principal o cargarlos cada vez que requiera de uno. Dicha idea la haría cargando los SWF en MovieClips vacíos, y dichos SWF irían vacíos, simplemente con el contenido para attachar en cualquier lugar, nivel o MovieClip del SWF principal o secundarios. Dicho sistema lo he probado en varias ocasiones y sé que hay veces que va, y otras veces que no. El motivo no lo sé, probablemente alguna chorrada que ignoro tal como podría haber sido la información del archivo, pero creo que aquí por lo que has comentado, no es el caso. Entonces el código evolucionó en individualizar los elementos attach en SWF diferentes y cargarlos una vez para luego duplicar internamente dentro del sistema, pero también me ha dado el mismo problema. Toda una aventura, jeje. Y así estoy, atascado con ese código.
Con respecto a lo que me comentas del getBytesLoaded(MovieClip); o getBytesTotal(MovieClip);, por loq ue estuve observando, MovieClip trabaja conforme al elemento que quieres que se muestre para la carga, si no especificas MovieClip, dicho elemento será undefined. Realmente, MovieClip es una clase, aunque ignoro también que sea algo más. Además, otro detalle que vi, es que si las variables o elementos o funciones que haga o genere, me dan muchos menos fallos si especifico que clase son a dejarlos "a pelo" en el código, por eso puede parecer así complicado, jeje.
Yo sigo indagando, porque la verdad, si pudiera hacer eso sin errores tendría media vida solucionada, jeje. Muchísimas gracias por todo solisarg y a ver si damos resuelto el ENIGMA... :P. ¡Un saludo!

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Ago 2011 07:31 pm
Posiblemente no te lo trace porque no hace tiempo a agregarlo al escenario cuando haces el trace ...y no llega a hacerlo nunca porque en la siguiente pasada lo sobreescribes con un nuevo duplicate en el mismo nivel (es decir reemplazas lo anterior que aún no había sido agregado) Hace mucho que no toco AS2 y en su momento usaba attachMovie, nunca duplicate, pero prueba a darle algo de tiempo antes de trazarlo (por lo menos un onEnterFrame) y no lo sobreescribas

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 25 Ago 2011 07:44 pm
Según mi código, en el que puse en el ejemplo, solo se puede duplicar una sola vez por el sumatorio n[0]; que en cuando sea diferente que 0 dicha condición pasa a ser false y no efectuarse, de esta manera cierro totalmente el bucle sobre la condición. Cuando es por tiempo de descarga y carga del archivo, lo que hago es verificar funcionamiento conforme al trace variable dentro del onEnterFrame, dejándolo un ratillo y luego observando resultados, verificando que se haga o no lo que mando, pero en este caso, no hay manera, jeje. El error lo coloco más a nivel de posibilidades, es decir, la captura de información de un SWF externo cargado en un SWF ejecutado como principal solo puede salir del propio SWF externo, sin embargo, para sesiones, gagets, etc... Tengo usado el SWF principal para la captura de informacion, e incluso conidicionar las cosas, pero como dije antes, solo me deja a veces, no siempre. Es rarísimo, jeje, y fijo que cuando me cosque será una tontería como una casa como casi siempre, jeje. Bueno, yo si encuentro alguna forma de hacerlo lo expongo aquí ;). Y muchísimas gracias por todo solisarg ;). ¡Un saludo!

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Ago 2011 12:19 pm
¡BUENAS DE NUEVO! ¡LO CONSEGUÍ! Jeje, pues eso, lo conseguí con 0 fallos, el problema viene con el nuevo método, que es generando las formas y deformando las existentes en base a algoritmos cargados en diferentes MovieClips, cosa que me viene de perlas para lo que quería, y cosa que da una resultante tal como lo que quería. El problema de este método es que las formas, imagenes o figuras están sugetas al mismo fallo de antes, pero de esta nueva manera al menos soluciona un cacho, jeje. Bueno, muchas gracias por todo y sobre todo a solisarg, jeje. Un saludo gentes.

Por miglug

Claber

113 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 28 Ago 2011 05:41 pm
Hola.

He leído todo lo que comentas y francamente, o me equivoco o te estas equivocando.

Según he leído el código y tu comentario del algoritmo, NO me cuadraba y lo he probado.

Dices que: le rompo el bucle de tiempo que se genera con el onEnterFrame();
con este algoritmo, de esta manera solo se ejecuta una sola vez.

Que es lo que solo se genera una sola vez ???? el onEnterFrame();
Según dices no te da traces, y no me extraña ya que no existen datos dentro del :

If cosa.getBytesLoaded(MovieClip) == etc.

que sean reconocidos, con lo cual no sale ningún trace y el onEnterFrame no para de ejecutarse.

Pon un trace fuera del If y veras como no deja de funcionar, y me remito a tu código.

n[0]++;
}
trace(cosa);
};

Espero me saques de dudas.

Cuae

Por Cuae

29 de clabLevel



 

msie8

 

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