Comunidad de diseño web y desarrollo en internet online

¡llamar swf desde swf, as3!

Citar            
MensajeEscrito el 12 Jul 2011 07:38 pm
Comunidad, gracias por leer este post, he estado investigando acerca de este tema y no logró encontrar una solución :meditar: , por esa razón decidí acudir a uds..

Al grano: :punal:
Estoy haciendo una web, en as3, en donde los botones cargan swf, lo que pasa es que hay un segmento de la pagina (un swf) que contiene otros botones (sección de home) que son algunos de los botones de la página principal

Función de un botón, del menú principal:

Código ActionScript :

function presboton0(e:Event):void
{
   conten_header.gotoAndPlay("home");//esto es una animación del encabezado
   boton0.gotoAndStop(11);//esto hace que el botón presionado se vea presionado
   NumeroBoton2 = 0;//variable que guarda el ultimo btn presionado 
   carga("contactus.swf");//función que carga el contenido 
}//fin function presboton0


lo que estoy buscando es que dentro del swf cargado un botón cargue esta misma función que esta arriba, pero no he podido hacerlo.(lo he intentado de múltiples maneras) :ownz:
Cualquier comentario, ayuda, o lo que sea, sería genial. ^^

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 12 Jul 2011 10:21 pm
Repetir código significa mal diseño, en todo caso pon funciones reutilizables en root que puedes llamar desde cualquier lado, root.loquesea()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 12 Jul 2011 10:34 pm
gracias por la crítica, voy a tomarlo en cuenta. (es mi 1º web)
Y que extraño, debo estar cometiendo algun error, cuando lo hago de la forma que tu me dices, me da el sigte error:

Código ActionScript :

Scene 1, Layer 'AS3', Frame 1, Line 821061: Call to a possibly 
undefined method carga through a reference with static type 
flash.display:DisplayObject.

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 12 Jul 2011 10:51 pm
Primero hazle un cast

MovieClip(root).loquesea()

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2011 01:39 am
:wtf: muchas gracias jorge.. pero eso ya lo he intentado.. y no me sirve.. me da error.. he leído mucho y no he podido solucionar algo tan "sencillo" diría yo.. :ownz:

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 14 Jul 2011 03:00 am
¿Que error?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2011 02:57 pm
muchas gracias, el error que me da es:

Código ActionScript :

TypeError: Error #1006: carga is not a function.
   at home_fla::MainTimeline/clickbtn0()


la funcion carga esta en el root, y es :

Código ActionScript :

var myLoader:Loader = new Loader();
addChild(myLoader);
function carga(uri:String):void
{
   myLoader.load(new URLRequest(uri));
   myLoader.x = 63;
   myLoader.y = 520;
   
   addEventListener(Event.ENTER_FRAME,chekea); //esto lo comenté para ver si era el problema y me da el mismo error
   removeEventListener(MouseEvent.ROLL_OUT, noamina); // esto tambien
}


gracias, alguna sugerencia, crítica, comentario, se lo agradecería mucho..

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 14 Jul 2011 03:09 pm
A menos que la función no esté en root, esto es 1+1, sorry a mi me funciona

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2011 04:07 pm
:crap: esta bien.. gracias de todas formas.. (y) en cuanto lo logre solucionar aquí lo posteo por si alguien alguna ves comente mi error.. y que quieres decir con 1+1?

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 14 Jul 2011 04:14 pm
1+1 es un principio básico, que en este casi indica que un clip cualquiera puede llamar a una función en root siempre que esta haya sido declarada. Proof de concept:

En una peli nueva escribimos esto en el primer frame:

Código ActionScript :

function hola(){
   trace("Hola")   
}


Luego creamos un MovieClip dibujando lo que nos plazca y en el primer frame ponesmo esto>

Código ActionScript :

MovieClip(root).hola()


Luego ejecutamos y se traza "Hola". Este es el principio básico, luego tu problema no responde a este mecanismo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 14 Jul 2011 04:40 pm
sería lo mismo si, en ves del MovieClip, fuera swf cargado?
disculpa tantas preguntas, de verdad gracias! :alabado:
lo que intento hacer es : de un swf cargado llamar la función (que esta en root) q carga otro swf y sustituya al que llama la función! se puede, si?

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 14 Jul 2011 04:57 pm
Una vez que ha terminado de cargar puedes llamar, y eso lo compruebas. En el ejemplo anterior en vez de hacerlo en un MovieClip, hazlo en el primer frame de una peli que carga. Claro que al compilarlo solo da error, por eso deberías hacer

Código ActionScript :

try{
   MovieClip(root).hola()
} catch(e:Errror){
   //la función no existe en este contexto
}


Así te deja compilar la peli aunque la función no exista en tiempo de compilación

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Jul 2011 10:28 pm
mmm.. no me funciona. :ownz: disculpa tantas molestias.

voy a pegar mi código de el root y de mi swf, si alguien le puede hechar un ojo y decirme donde cometo el error, me seria de mucha ayuda. De antemano gracias.

root: ↓

Código ActionScript :

stop();
import flash.display.MovieClip;
import flash.events.Event;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;
import flash.display.SimpleButton;  
import flash.text.*;
import flash.media.SoundMixer; 

boton0.buttonMode = true;
boton1.buttonMode = true;
boton2.buttonMode = true;
boton3.buttonMode = true;
boton4.buttonMode = true;

boton0.mouseChildren = false;
boton1.mouseChildren = false;
boton2.mouseChildren = false;
boton3.mouseChildren = false;
boton4.mouseChildren = false;

////////////////////////////////////////////////////////////////////////////////////////////

boton0.addEventListener(MouseEvent.MOUSE_OVER, anima);
boton0.addEventListener(MouseEvent.MOUSE_OUT, noamina);
boton0.addEventListener(MouseEvent.MOUSE_DOWN, presboton0);

boton1.addEventListener(MouseEvent.MOUSE_OVER, anima);
boton1.addEventListener(MouseEvent.MOUSE_OUT, noamina);
boton1.addEventListener(MouseEvent.MOUSE_DOWN, presboton1);

boton2.addEventListener(MouseEvent.MOUSE_OVER, anima);
boton2.addEventListener(MouseEvent.MOUSE_OUT, noamina);
boton2.addEventListener(MouseEvent.MOUSE_DOWN, presboton2);

boton3.addEventListener(MouseEvent.MOUSE_OVER, anima);
boton3.addEventListener(MouseEvent.MOUSE_OUT, noamina);
boton3.addEventListener(MouseEvent.MOUSE_DOWN, presboton3);

boton4.addEventListener(MouseEvent.MOUSE_OVER, anima);
boton4.addEventListener(MouseEvent.MOUSE_OUT, noamina);
boton4.addEventListener(MouseEvent.MOUSE_DOWN, presboton4);

//sobre y fuera botones

function anima(e:Event):void
{
   e.target.gotoAndPlay("anima");
}
//fin function anima;

function noamina(e:Event):void
{
   e.target.gotoAndPlay("noanima");
}
//fin function noanima;
//fin de sobre y fuera de los botones

////////////////////////////////////////////////////////////////////////////////////////////

var myLoader:Loader = new Loader();
addChild(myLoader);

function carga(uri:String):void
{
   addChild(myLoader);
   myLoader.load(new URLRequest(uri));
   myLoader.x = 63;
   myLoader.y = 520;
   addEventListener(Event.ENTER_FRAME,chekea);
   SoundMixer.stopAll();
}

boton0.gotoAndPlay("anima");
carga("home.swf");

/////////////////////////////////////////////
var NumeroBoton:int;
var NumeroBoton2:int;
/////////////////////////////////////////////

function chekea(e:Event):void
{
   switch (NumeroBoton)
   {
      case 0 :
         boton0.gotoAndPlay("noanima");
         NumeroBoton = NumeroBoton2;
         
         break;
      case 1 :
         boton1.gotoAndPlay("noanima");
         NumeroBoton = NumeroBoton2;
         
         break;
      case 2 :
         boton2.gotoAndPlay("noanima");
         NumeroBoton = NumeroBoton2;
         
         break;
      case 3 :
         boton3.gotoAndPlay("noanima");
         NumeroBoton = NumeroBoton2;
         
         break;
      case 4 :
         boton4.gotoAndPlay("noanima");
         NumeroBoton = NumeroBoton2;
         
         break;
   }//fin switch (NumeroBoton)

}//fin function chekea

////////////////FUNCTION presboton0////////////////

function presboton0(e:Event):void
{
   conten_header.gotoAndPlay("home");
   boton0.gotoAndStop(11);
   NumeroBoton2 = 0;
   carga("home.swf");
   
}//fin function presboton0

////////////////FUNCTION presboton1////////////////
function presboton1(e:Event):void
{
   conten_header.gotoAndPlay("aboutus");
   boton1.gotoAndStop(11);;
   NumeroBoton2 = 1;
   carga("aboutus.swf");
   
}//fin function presboton1

////////////////FUNCTION presboton2////////////////
function presboton2(e:Event):void
{
   conten_header.gotoAndPlay("services");
   boton2.gotoAndStop(11);
   NumeroBoton2 = 2;
   carga("services.swf");
   
}//fin function presboton2

////////////////FUNCTION presboton3////////////////
function presboton3(e:Event):void
{
   conten_header.gotoAndPlay("home");
   boton3.gotoAndStop(11);
   NumeroBoton2 = 3;
   carga("news.swf");
   
}//fin function presboton3

////////////////FUNCTION presboton4////////////////
function presboton4(e:Event):void
{
   conten_header.gotoAndPlay("contactus");
   boton4.gotoAndStop(11);
   NumeroBoton2 = 4;
   carga("contactus.swf");

}//fin function presboton4
//fin de las funciones pres#

///////////////////////////////////////////////////////////////////////////////////////////////

//botones del pie de página
btn_0.addEventListener(MouseEvent.CLICK, presboton0)
btn_1.addEventListener(MouseEvent.CLICK, presboton1)
btn_2.addEventListener(MouseEvent.CLICK, presboton2)
btn_3.addEventListener(MouseEvent.CLICK, presboton3)
btn_4.addEventListener(MouseEvent.CLICK, presboton4)

///////////////////////////////////////////////
//fuente embebida

 
var font:myFont=new myFont();

var txt_fmt:TextFormat=new TextFormat();
txt_fmt.font=font.Eras_Demi;;
txt_fmt.size=24;

var txt:TextField=new TextField();
txt.autoSize=TextFieldAutoSize.CENTER;
txt.defaultTextFormat=txt_fmt;
txt.embedFonts=true;
boton0.txt.text = "HOME";
boton1.txt.text = "ABOUT US";
boton2.txt.text = "SERVICES";
boton3.txt.text = "NEWS";
boton4.txt.text = "CONTACTUS";
buscador.text = "";
conten_header.services.txt.text="The best services for your convenience";
txt.selectable=false;


y mi swf: ↓

Código ActionScript :

stop();

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.DisplayObjectContainer;
import flash.events.MouseEvent;

import flash.events.MouseEvent;
btn0.buttonMode = true;
btn1.buttonMode = true;
btn2.buttonMode = true;

btn0.addEventListener(MouseEvent.ROLL_OVER, animabtn);
btn1.addEventListener(MouseEvent.ROLL_OVER, animabtn);
btn2.addEventListener(MouseEvent.ROLL_OVER, animabtn);

btn0.addEventListener(MouseEvent.ROLL_OUT, noanimabtn);
btn1.addEventListener(MouseEvent.ROLL_OUT, noanimabtn);
btn2.addEventListener(MouseEvent.ROLL_OUT, noanimabtn);

function animabtn(e:Event):void
{
   e.target.gotoAndPlay("sobre");
}
//fin function anima;

function noanimabtn(e:Event):void
{
   e.target.gotoAndPlay("fuera");
}
/////////////////////////////////////////////////////////////////////////////////

btn0.addEventListener(MouseEvent.CLICK, clickbtn0);
btn1.addEventListener(MouseEvent.CLICK, clickbtn1);
btn2.addEventListener(MouseEvent.CLICK, clickbtn2);
news_btn.addEventListener(MouseEvent.CLICK, news);

function clickbtn0(e:MouseEvent):void
{   
   MovieClip(root).carga("aboutus.swf"); 
//asi lo intento y no me lo carga
}

//fin function anima;

//sobre y fuera botones
function clickbtn1(e:MouseEvent):void
{
   MovieClip(root).btn1.addEventListener(MouseEvent.CLICK, MovieClip(root).presboton2)
//asi tampoco lo carga

}
//fin function anima;

//sobre y fuera botones
function clickbtn2(e:MouseEvent):void
{
      root.carga("contactus.swf"); //tampoco   
}
//fin function anima;
function news(e:MouseEvent):void
{
   carga("news.swf");//menos :S
   
}
//fin function anima;

news_btn.buttonMode = true;
text_btn.buttonMode = true;


si alguien me puede ayudar, sería genial.. (y)
todo tipo de crítica, es totalmente bienvenida, con los brazos abiertos, es mi 1º web, y se que debo mejorar en mucho, x lo tanto adelante, se pueden desestresar!
Gracias de antemano comunidad! (y)

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 21 Jul 2011 01:50 am
Vaya tremendo ladrillo de código. En la función carga pon un trace a ver si está siendo llamada,

Código ActionScript :

function carga(uri:String):void {
   trace("Cargando "+uri)
   (...)
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Jul 2011 03:00 pm
Gracias..
Cuando ejecuto la carga desde el swf lo que me dice es que carga no es una función..
y cuando la ejecuto desde el swf principal, me dice "cargando" + el nombre del swf que carga..


Cuando lo ejecuto desde swf cargado:

Código ActionScript :

TypeError: Error #1006: carga is not a function.
   at home_fla::MainTimeline/clickbtn1()
:(

Por egonzalez

53 de clabLevel



Genero:Masculino  

C.R.

chrome
Citar            
MensajeEscrito el 21 Jul 2011 05:41 pm
Una función pública es accesible desde cualquier elemento cargado si le pones ruta absoluta, es decir root, a menos que la línea principal no haya llegado al fotograma donde la tienes declarada

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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