| |||
paso de variables entre swf Tengo un swf (principal), al pulsar un boton cargo otro swf, ¿como puedo obtener el valor de algunas variables del swf (principal) en el swf que acabo de cargar? |
| |||
explica un poco mas la forma en que cargas el segundo swf, en funcion de eso es que tenes que pasar variables de una determinada manera |
| |||
Buenas sqa212! Quizas esto te ayude: http://www.webnueva.com/crono/tutori.../swftoswf1.htm Un saludo! |
| |||
sqa212 Veamos... Si en la movieClip principal en un frame pones por ejemplo var Importe:Number; Importe = 100; Si desde este movieClip cargar el segundo... entonces dentro del segundo puedes saber el valor en Importe asi... trace("El valor es "+_root.Importe); mirate el scope de las variables con _root o _parent. Espero haber ayudado. Gibi www.joies.mataller.com |
| |||
Cuando he vuelto a mirar el post me he encontrado con nuevas respuestas de che y gibi, que voy a mirar ahora , a la pregunta que me hace cmc: Me gustaria saber como pasar variables tanto para los swf cargados a traves de un boton, como para los swf cargados directamente. Si hay alguna forma mejor de cargar los swf con un boton o directamente, me gustaria saberlo tambien. En el boton que esta en el swf principal pongo este codigo para cargar el swf. on (release) { _root.createEmptyMovieClip("contenedor1", 4); loadMovie("cb1.swf", "contenedor1"); contenedor1._x = 150; contenedor1._y = 20; } Si cargase los swf sin hacer uso de ningun boton. for(i=0;i<4;i++) { _root.createEmptyMovieClip("clip"+i,i); _root["clip"+i]._x=40+i*20; _root["clip"+i]._y=40+i*20; _root["clip"+i].loadMovie("archivo"+i+".swf"); } Gracias a todos |
| |||
Da lo mismo para el acceso a variables. Imagina lo siguiente: En el clip cb1.swf en pones Euro = 166.386; Y en el clip principal lo que tu has diseñado. on (release) { _root.createEmptyMovieClip("contenedor1", 4); loadMovie("cb1.swf", "contenedor1"); contenedor1._x = 150; contenedor1._y = 20; label_txt.text = "20 Euros valen en Pts " + (contenedor1.Euro * 20); } Es decir ha igual que accedes a las variables del objeto contenedor1 como pueden ser _y _x tambien puedes acceder a las que crees tu... y tambien les puedes cambiar el valor... |
| |||
No, disculpa pero no da lo mismo pasar variables de un swf que contiene a otro que de uno que esta compartiendo el html con otro. en el primer caso con utilizar las rutas alcanza, en el segundo tenes que utilizar local conection |
| |||
En el link que sugirio chem explica el uso de local conection, que por las pruebas que he realizado estoy de acuerdo con cmc, solo se puede usar cuando dos swf independientes comparten la misma pagina html, no cuando un movieclip ha sido creado y cargado desde un swf a otro swf, haciendo esto ultimo en lugar de mostrar en el texto dinamico el valor de la variable muestra: _level0.contenedor1.vari En mi caso en el que quiero tener un swf principal y a partir de el cargar nuevos swf dentro de el creo que tendre que usar las rutas para pasar las variables. ¿Algun link sobre como usar rutas? Con respecto a lo que me contesto gibi, donde dices: label_txt.text = "20 Euros valen en Pts " + (contenedor1.Euro * 20); ¿tengo que poner en el cb1.swf un una capa llamada label_txt y en ella un campo dinamico para que me muestre: "20 Euros valen en Pts " + (contenedor1.Euro * 20);? En tu primera contestacion me pones, trace("El valor es "+_root.Importe); ¿Que tengo que poner en el segundo movie clip para visualizarlo? Gracias |
| |||
El único link que tengo a mano es el mio, pero no es especifico de rutas sino de carga en niveles entra en www.disemedios.com.ar y luego anda a “master” / “flash” y busca carga en niveles Adema acá te dejo algún dato mas al respecto Supongamos que tenes una película principal "fondo.swf" y una secundaria productos.swf En la de fondo colocas este script en el primer frame loadMoviNum("productos.swf", 10); Esto lo que hace es cargarte la película productos.swf en el nivle 10. Ahora bien supongamos que la película productos tiene en su escenario un movi clip que como nombre de instancia le colocas "Ins_produc1", entonces en la película principal donde cargaste a productos en el nivel 10 le decís que controle la posición del movi de productos y lo haces con esto _level10.Ins_produc1._x = 100; _level10.Ins_produc1._y = 100; Con esto estas controlando desde la película principal a un objeto que esta en determinado nivel. Ahora supongamos la inversa supongamos que tienes un objeto en la película de fondo llamado "Ins_Boton" a el cual quieres controlar desde la película del nivel 10 entonces puedes hacer esto _level0.Ins_Boton._x = 100; o también puedes hacer esto _root.Ins_Boton._x = 100; Esto es debido a que el root y el level0 en este caso es lo mismo. Además de esto tenes _parent y this que básicamente lo que hacen es: el primero hace referencia a una línea de tiempo anterior a la actual, en donde estas colocando el _parent y el segundo hace referencia al mismo objeto esto se utiliza cuando colocas mc dentro de otro mc o botones dentro de un mc o para mil cosas mas que te vas a ir dando cuenta. Bueno espero que te sirva. suerte |
| |||
Aunque me habeis dado bastante informacion,no lo consigo. He creado un archivo zip con todos los fla y swf que estoy utilizano y un archivo de texto en el que explico,lo que ocurre. Lo podeis descargar desde aqui si quereis ayudarme: http://es.geocities.com/sqa212/COMUNICACION.zip Gracias a todos |
| |||
Perdona mi tardanza, pero ya se que problema tienes. te explico, creo que lo realizas al reves... veras, tu codigo... on (release) { _root.createEmptyMovieClip("contenedorB1", 20); loadMovie("pantalla1.swf", "contenedorB1"); _root.contenedorB1._x = 150; _root.contenedorB1._y = 20; _level20.valorvarpantalla1 = "Var 1 cargada desde swf principal"; } El error es que flash no se detiene en el loadMovie es decir siguie su ejecucion, por tanto _level20.valorvarpantalla1 no existe (por muy rapido que sea tu pc) hasta que no se ha cargado todo el loadMovie. Las coordenadas _x y _y si te funciona por que son propiedades directas en createEmptyMovieClip, es decir del objeto MovieClip que creas y este es instantaneo. Mi solucion es on (release) { _root.createEmptyMovieClip("contenedorB1", 20); loadMovie("pantalla1.swf", "contenedorB1"); _root.contenedorB1._x = 150; _root.contenedorB1._y = 20; _root.valor = "Var 1 cargada desde swf principal"; } Y en el frame 1 de pantall1.swf pones valorvarpantalla1 = _root.valor; como _root.valor se crea instantaneamente, al carga el frame 1 de pantalla1.swf ya existe y por tanto lo repinta bien en pantalla. mmmmhhh casi lo tenias.... Cosilllas de FLASH.... espero te sirva... |
| |||
Gracias gibi, no tengo nada que perdonarte, pero si mucho que agradecerte. No ha sido tarde, porque aun no lo habia solucionado, y no sabes la necesidad que tenia de conseguir esto, de nuevo muchas gracias. |
| ||||
Respuesta: paso de variables entre swf Hola amigo aca te mando una solucion practica. Lo que gabby te propuso es verdad que funciona si tu quieres mandar una variable al clip de pelicula cargado. Pero si haces lo inverso no funciona osea si quieres optener una variable del clip de pelicula cargado con loadMovie.. Ahora te explicare un metodo unilateral que te permitira obtener la variable con localconnection. Creas un clip de pelicula que permita ser el emizor en esto programaremos una variable dentro del clip:
Código:
Ahora crearemos otro clip el receptor que por loadmovie abrira el clip anteriorvar texto:String = "Hola mundo"; emisor=new LocalConnection(); emisor.send("conectado","probar",texto);
Código:
cuas.loadMovie("emizor.swf"); receptor=new LocalConnection(); receptor.probar=function(datos){texto=datos;} receptor.connect("conectado"); |
| ||||
Respuesta: paso de variables entre swf Hola amigo aca te mando una solucion practica. Lo que gabby te propuso es verdad que funciona si tu quieres mandar una variable al clip de pelicula cargado. Pero si haces lo inverso no funciona osea si quieres optener una variable del clip de pelicula cargado con loadMovie.. Ahora te explicare un metodo unilateral que te permitira obtener la variable con localconnection. Creas un clip de pelicula que permita ser el emizor en esto programaremos una variable dentro del clip:
Código:
Ahora crearemos otro clip el receptor que por loadmovie abrira el clip anteriorvar texto:String = "Soy el mensaje de un SWF EXTERNO"; emisor=new LocalConnection(); emisor.send("conectado","probar",texto);
Código:
//Contenedor this.createEmptyMovieClip("contenedor1", 1); image_mc._x = 0; image_mc._y = 0 contenedor1.loadMovie("emizor.swf"); receptor=new LocalConnection(); receptor.probar=function(datos){ texto=datos; trace(texto); } receptor.connect("conectado"); Última edición por initiald; 09/12/2008 a las 12:23 |