Comunidad de diseño web y desarrollo en internet online

Necesito ayuda con el codigo de una web

Citar            
MensajeEscrito el 17 Nov 2009 10:55 am
Estoy con un grave problema que no soy a solucionar, le he dado mil vueltas y no encuentro la solución.
Estoy intentando poner en un movie clip de una web, un menu hecho con array.
El problema es que al poner el menu de botones me sale en todas las paginas de la web y no solo cuando voy a la pagina que tiene el movieclip indicado.
El codigo del menu de botones es el siguiente;
fm_button es nombre de instancia del clip donde hace el menu de botones y poemas_mc es el nombre de instancia del clip donde pongo los botones.

Pero asi tal como lo veis esta mal ya que me da el error TypeError: Error #1010: Un término no está definido y no tiene propiedades.
Si no pongo el poemas_mc sale bien pero es cuando se repite el menu en todas la paginas.
Si alguien me pudiese ayudar le estaria agradecido, necesito saber como puedo solucionar esto ya que lo necesito.
Si no me he explicado muy bien me pongo en contacto para explicarlo mejor.
Gracias por las molestias


Código :

fm_button.poemas_mc.visible = false;



var menu_label:Array = new Array("Primeros Poemas (1927-1929)", "Solitude, Optional april (1929-1937)", "Para complementar1", 
                         "Sera sera", "Para los olivos", "Siempre seco", "Tarde de verano");

var total:Number = menu_label.length;
var i:Number = 0;
var page:Number;
var main_menu:MovieClip = new MovieClip();
stage.addChild(main_menu);

for( i = 0; i < total; i++ )
{
   var btn = new poema_button();
   btn.name = "btn" + i;
   btn.x = fm_button.x;
   btn.y = fm_button.y + 80 * i;
   btn.item_no = i;
   btn.addEventListener( Event.ENTER_FRAME, btn_enter );
   
   var each_substring:Array = menu_label[i].split("|");  
   btn.poema_button_label.fm_label.text = each_substring[0];   
   btn.item_url = each_substring[1];
   main_menu.addChild(btn);
}

function btn_over(e:MouseEvent):void
{
   e.target.over = true;
}

function btn_out(e:MouseEvent):void
{
   e.target.over = false;
}

function btn_click(e:MouseEvent):void
{
   var mc = e.target.parent;
   if( mc.item_url != undefined )  
      navigateToURL( new URLRequest( mc.item_url ), "_parent" );
   else  
      change_page(mc.item_no);
}

function btn_enter(e:Event):void
{
   var mc = e.target;
   if( mc.over == true )
      mc.nextFrame();
   else
      mc.prevFrame();
}

function change_page(no:Number):void
{
   for( var i:Number = 0; i < main_menu.numChildren; i++ )
   {
      var mc = MovieClip( main_menu.getChildAt(i) );
      mc.over = false;
      mc.poema_click_area.visible = true;
      mc.addEventListener( MouseEvent.ROLL_OVER, btn_over );
      mc.addEventListener( MouseEvent.ROLL_OUT, btn_out );
      mc.addEventListener( MouseEvent.CLICK, btn_click );
   }
   var mc_selected = MovieClip( main_menu.getChildAt(no) );
      mc_selected.over = true;
      mc_selected.poema_click_area.visible = false;
      mc_selected.removeEventListener( MouseEvent.ROLL_OVER, btn_over );
      mc_selected.removeEventListener( MouseEvent.ROLL_OUT, btn_out );
      mc_selected.removeEventListener( MouseEvent.CLICK, btn_click );

   page = no + 1;
   play();
}

change_page(0);   

Por xurde

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Nov 2009 12:14 pm
El loop que hace el addChild de los botones no está en una función, sino simplemente en la línea de tiempo, y es el único código que veo que hace un addChild, es decir haría que veas los elementos duplicados, con lo cual (a menos que se ejecute otro código que no veo) lo que supongo es que vuelves a pasar por este frame varias veces, algo que no deberías

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2009 08:08 pm
Ante todo gracias por la contestación.
Entonces deberia pone el bucle for dentro de una función??
no se como podria hacer esto, si me puedes ayudar te lo agradeceria.
esto me trae de cabeza.

Por xurde

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Nov 2009 08:26 pm
Algo así:

Código ActionScript :

function creaMenu(){
 var menu_label:Array = new Array("Primeros Poemas (1927-1929)", "Solitude, Optional april (1929-1937)", "Para complementar1", 
                         "Sera sera", "Para los olivos", "Siempre seco", "Tarde de verano");

var total:Number = menu_label.length;
var i:Number = 0;
var page:Number;
var main_menu:MovieClip = new MovieClip();
main_menu.n ame = "menu"
stage.addChild(main_menu);

for( i = 0; i < total; i++ )
{
   var btn = new poema_button();
   btn.name = "btn" + i;
   btn.x = fm_button.x;
   btn.y = fm_button.y + 80 * i;
   btn.item_no = i;
   btn.addEventListener( Event.ENTER_FRAME, btn_enter );
   
   var each_substring:Array = menu_label[i].split("|");  
   btn.poema_button_label.fm_label.text = each_substring[0];   
   btn.item_url = each_substring[1];
   main_menu.addChild(btn);
}
}
(...)
if(!this.getChildByName("menu")) creaMenu()
change_page(0);


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Nov 2009 10:10 pm
Estoy haber si puedo arregarlo por fin pero me da un error en la funtion change_page el error es
1120:Acceso a una propiedad main-menu no definida
y en la de 1120:Acceso a una propiedad page no definida

Le estoy dando vueltas haber que puede ser
No sabes lo que te agradezco la ayuda que me ofreces
gracias

Por xurde

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 17 Nov 2009 11:56 pm
Siento mi ignorancia pero no encuentro la solución, me sigue dando el error en la funcion change_page.
mi codigo ahora lo tengo asi;

Código ActionScript :

hola_button.visible = false;


function creaMenu (){
var menu_label:Array = new Array("Primeros Poemas (1927-1929)", "Solitude, Optional april (1929-1937)", "Para complementar1", 
                         "Sera sera", "Para los olivos", "Siempre seco", "Tarde de verano");

var total:Number = menu_label.length;
var i:Number = 0;
var page:Number;
var main_menu:MovieClip = new MovieClip(); 
main_menu.name = "menu";
stage.addChild(main_menu);


for( i = 0; i < total; i++ )
{
   var btn = new poema_button();
   btn.name = "btn" + i;
   btn.x = hola_button.x;
   btn.y = hola_button.y + 80 * i;
   btn.item_no = i;
   btn.addEventListener( Event.ENTER_FRAME, btn_enter );
   
   var each_substring:Array = menu_label[i].split("|");  
   btn.poema_button_label.fm_label.text = each_substring[0];   
   btn.item_url = each_substring[1];
   main_menu.addChild(btn);
}

}


function btn_over(e:MouseEvent):void
{
   e.target.over = true;
}

function btn_out(e:MouseEvent):void
{
   e.target.over = false;
}

function btn_click(e:MouseEvent):void
{
   var mc = e.target.parent;
   if( mc.item_url != undefined )  
      navigateToURL( new URLRequest( mc.item_url ), "_parent" );
   else  
      change_page(mc.item_no);
}

function btn_enter(e:Event):void
{
   var mc = e.target;
   if( mc.over == true )
      mc.nextFrame();
   else
      mc.prevFrame();
}


function change_page(no:Number):void
{
   
   for( var i:Number = 0; i < main_menu.numChildren; i++ )
   {
      var mc = MovieClip( main_menu.getChildAt(i) );
      mc.over = false;
      mc.poema_click_area.visible = true;
      mc.addEventListener( MouseEvent.ROLL_OVER, btn_over );
      mc.addEventListener( MouseEvent.ROLL_OUT, btn_out );
      mc.addEventListener( MouseEvent.CLICK, btn_click );
   }
   var mc_selected = MovieClip( main_menu.getChildAt(no) );
      mc_selected.over = true;
      mc_selected.poema_click_area.visible = false;
      mc_selected.removeEventListener( MouseEvent.ROLL_OVER, btn_over );
      mc_selected.removeEventListener( MouseEvent.ROLL_OUT, btn_out );
      mc_selected.removeEventListener( MouseEvent.CLICK, btn_click );

   page = no + 1;
   play();
}
if(!this.getChildByName("menu")) creaMenu()
change_page(0);


Los errores ahora son que main_menu y page en function change_page no estan definidos.

Por xurde

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 18 Nov 2009 01:21 pm
Prueba con algo así:

Código ActionScript :

hola_button.visible=false;

var page:Number;
function creaMenu() {
   var menu_label:Array = new Array("Primeros Poemas (1927-1929)", "Solitude, Optional april (1929-1937)", "Para complementar1",  
                            "Sera sera", "Para los olivos", "Siempre seco", "Tarde de verano");

   var total:Number=menu_label.length;
   var i:Number=0;   
   var main_menu:MovieClip = new MovieClip();
   main_menu.name="menu";
   stage.addChild(main_menu);


   for (i = 0; i < total; i++) {
      var btn = new poema_button();
      btn.name="btn"+i;
      btn.x=hola_button.x;
      btn.y=hola_button.y+80*i;
      btn.item_no=i;
      btn.addEventListener( Event.ENTER_FRAME, btn_enter );

      var each_substring:Array=menu_label[i].split("|");
      btn.poema_button_label.fm_label.text=each_substring[0];
      btn.item_url=each_substring[1];
      main_menu.addChild(btn);
   }

}


function btn_over(e:MouseEvent):void {
   e.target.over=true;
}

function btn_out(e:MouseEvent):void {
   e.target.over=false;
}

function btn_click(e:MouseEvent):void {
   var mc=e.target.parent;
   if (mc.item_url!=undefined) {
      navigateToURL( new URLRequest( mc.item_url ), "_parent" );
   } else {
      change_page(mc.item_no);
   }
}

function btn_enter(e:Event):void {
   var mc=e.target;
   if (mc.over==true) {
      mc.nextFrame();
   } else {
      mc.prevFrame();
   }
}


function change_page(no:Number):void {
   var main_menu:MovieClip = this.getChildByName("menu") as MovieClip
   for (var i:Number = 0; i < main_menu.numChildren; i++) {
      var mc=MovieClip(main_menu.getChildAt(i));
      mc.over=false;
      mc.poema_click_area.visible=true;
      mc.addEventListener( MouseEvent.ROLL_OVER, btn_over );
      mc.addEventListener( MouseEvent.ROLL_OUT, btn_out );
      mc.addEventListener( MouseEvent.CLICK, btn_click );
   }
   var mc_selected=MovieClip(main_menu.getChildAt(no));
   mc_selected.over=true;
   mc_selected.poema_click_area.visible=false;
   mc_selected.removeEventListener( MouseEvent.ROLL_OVER, btn_over );
   mc_selected.removeEventListener( MouseEvent.ROLL_OUT, btn_out );
   mc_selected.removeEventListener( MouseEvent.CLICK, btn_click );

   page=no+1;
   play();
}
if (! this.getChildByName("menu")) {
   creaMenu();
}
change_page(0);


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Nov 2009 12:48 am
No se si darme por vencido me sale este error:
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
at poemas/change_page()
at poemas/frame1()
ya estoy muy perdido...
Puede que esto no tenga ya solución

Por xurde

6 de clabLevel



 

msie8
Citar            
MensajeEscrito el 19 Nov 2009 11:03 am
En realidad cuando da un error de ese tipo que es un poco inespecífico, tienes que comentar todas las líneas de esa función e ir desccomentando de a una hasta que vez que sale el error, allí entonces verás a que elemento se refiere. El candidato allí es algún clip interno, por ejemplo mc.poema_click_area

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 Nov 2009 01:07 am
Hola solisarg, tengo que agradecerte la ayuda que me has ofrecido, no sabes lo mucho que te lo agradezco de verdad, esto me traia de cabeza y por fin hoy creo que lo he resuelto.
Ayer despues de trastear con este último error que me habia dado, que no sabia ni por donde empezar, ya que el codigo parecia estar todo bien, lo habia dejado por imposible.
Mirando un poco, me di cuenta que en algunas linea de codigo que tu me diste ulilizabas el this en lugar de stage, las cambie y dejo de dar el error, todo volvia a funcionar pero el menu que solo queria que saliese en el clip de pelicula de una parte salia superpuesto en todas otra vez.... lo deje por imposible y ya me palnteaba otra manera de presentar la web.
Y hoy mirando un poco, he cambiado todos lo stage por this en la funcion crearMenu y ya creo que funciona.
Mañana lo mirare con más detenimiento y espero que no me den mas problemas.
Bueno pues agradecerte el compartir tu sabiduria y espero me ayudes en próximos tropezones, que alguno más me llegará seguro....
Gracias.....

Por xurde

6 de clabLevel



 

msie8

 

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