Comunidad de diseño web y desarrollo en internet online

manipular boton desde otro mc

Citar            
MensajeEscrito el 08 Ago 2009 08:05 pm
Que tal chavos, tengo una duda ojala ma puedan ayudar, muchas gracias.
tengo el siguiente codigo que me genera un submenu segun la opcion del menu principal, dentro de este submenu hago un attach area_submenu.attachMovie("area_tween", "atween", 1); que dentro tiene un boton con instancia que tiene como nombre close_btn y quiero moverlo de posicion y agregar la funcion al evento onRelease desde la linea de tiempo principal pero no me sale, me pueden aconsejar por favor?

yo utilizo:
this.area_submenu.atween.close_btn.onRelease=function (){
_parent.removeMovieClip();
}

el codigo es el siguiente:

Código ActionScript :

var lista_submenu1:Array = new Array(new Array("Mensaje", "Contacto", "Horarios"), new Array("inicio44.html", "inicio3.html", "inicio4.html"));
var lista_submenu2:Array = new Array(new Array("News", "Eventos"), new Array("inicio44.html", "inicio3.html"));
var lista_submenu3:Array = new Array(new Array("Historia", "Reflexiones", "Articulos"), new Array("inicio44.html", "inicio3.html", "inicio4.html"));
var lista_submenu4:Array = new Array(new Array("Fotos", "Videos"), new Array("inicio44.html", "inicio3.html"));
//////////////////////////////////////////////////////////////
function submenu(lista:Array, posx:Number, posy:Number) {
   var area_submenu:MovieClip = this.createEmptyMovieClip("area_submenu", 10);
   area_submenu._x = posx;
   area_submenu._y = posy;
   area_submenu.attachMovie("area_tween", "atween", 1);
   area_submenu.atween._x = 100;
   area_submenu.atween._y = 80;
[b]   area_submenu.atween.close_btn_x = 80; // esto tampoco sale
   area_submenu.atween.close_btn_y = 10; // esto tampoco sale[/b]
   ////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   for (var i:Number = 0; i<lista[0].length; i++) {
      area_submenu.createEmptyMovieClip("submenu"+i, 10+i);
      area_submenu["submenu"+i]._x = 5;
      area_submenu["submenu"+i]._y = 30*i;
      area_submenu["submenu"+i].createTextField("textarea", 1, 100, 100, 170, 20);
      area_submenu["submenu"+i].textarea.embedFonts = true;
      area_submenu["submenu"+i].textarea.border = true;
      area_submenu["submenu"+i].textarea.text = lista[0][i];
      area_submenu["submenu"+i].dir_url = lista[1][i];
      format_texto(area_submenu["submenu"+i].textarea);
      area_submenu["submenu"+i].onRelease = function() {
         getURL(this.dir_url, "_self");
      };
   }
}

Por adanpd

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 10 Ago 2009 12:01 pm
Dado que el menú contenedor ya tiene un evento de ratón, no puedes asignárselo a los que tengas dentro:

area_submenu["submenu"+i].onRelease = function() {

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 Ago 2009 01:11 pm
entonces no existe forma alguna de cambiar las propiedades ni de asignar el evento onRelease a un boton desde un mc superior?

solo se puede manejar el evento onRelease desde la linea de tiempo a la que pertenece el boton?

Por adanpd

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 10 Ago 2009 01:15 pm
No estoy diciendo esto, sino que si un MC tiene asignado un onPress, no puede tener contenido interno con onPress, porque el click será interceptado por el contenedor sin llegar al contenido. Luego puedes asinar el evento desde donde quieras en tanto toda la cadena haya sido instanciada

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Ago 2009 12:42 am
Ah ok, ya entendi Jorge, muchas gracias por tu respuesta, lo que no se es porque no me sale ya que el mc contenedor no tiene asignado ningun onPress u onRelease y si esta instanciado, no entiendo realmente, ya me hice bolas.

El mc contenedor en este caso es "area_submenu", este mc contenedor tiene a su vez dentro un mc "atween" y otros que se llaman "submenu"+i :

area_submenu.attachMovie("area_tween", "atween", 1);
//........
for (var i:Number = 0; i<lista[0].length; i++) {
area_submenu.createEmptyMovieClip("submenu"+i, 10+i);
//........

En la linea de tiempo del mc contenedor, yo estoy asignando un evento onRelease a los mc "submenu"+i:

area_submenu["submenu"+i].dir_url = lista[1][i];
area_submenu["submenu"+i].onRelease = function() {
getURL(this.dir_url, "_self");
};

Y despues, en la misma linea de tiempo del mc contendor, quiero asignar al boton que esta dentro de atween su evento:

area_submenu.atween.close_btn.onRelease=function (){
_parent.removeMovieClip();
}

algo esta mal? o no se puede declarar en la misma linea de tiempo mas de un evento onRelease?

en la unica forma que me ha funcionado es declarando el evento en la liena de tiempo de atween desde la biblioteca pero yo quiero saber como se puede controlar desde afuera, si esto se puede claro.

Por adanpd

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Ago 2009 10:18 am
Ok, le he agregado formato a tu primer mensaje, donde seguramente me he confundido en los nombres, dale formato a tu code siempre en los posts, http://foros.cristalab.com/mi-codigo-legible-t55926/
Luego hay que mirar dos cosas: que el MC esté al alcance y luego corregir el callback, sería algo así:

Código ActionScript :

trace("Asigno a "+area_submenu.atween.close_btn)
area_submenu.atween.close_btn.onRelease=function (){
  trace("close_btn clicked")
  this._parent.removeMovieClip();
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Ago 2009 09:06 pm
Muchas gracias por el consejo Jorge, lo voy a tomar en cuenta la proxima vez que escriba codigo, por otro lado te comento que use el

Código ActionScript :

trace("Asigno a "+area_submenu.atween.close_btn)
que me comentaste y me sale "undefined" sabes a que se debera esto? gracias por tus respuestas.

Por adanpd

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 11 Ago 2009 09:17 pm
Eso quiere decir que el MC al que quieras asignar la acción aún no existe. Puedes incluso trazar la jerarquía

trace("Existe: "+area_submenu)
trace("Existe "+area_submenu.atween)
trace("Existe "+area_submenu.atween.close_btn)

Si el clip no está en "alcance" (scope), quiere decir que aún no ha sido instanciado, en otras palabras, debes buscar el punto en que se instancia para poder darle la acció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 11 Ago 2009 11:32 pm
que tal Jorge ya hice lo que me aconsejaste y en los dos primeros trace si me regresa la ruta del objeto pero en el ultimo no.
Lo que tuve que hacer es eliminar el boton con instancia dentro del mc que esta en la biblioteca que attacheo (area_submenu.attachMovie("area_tween", "atween", 1);), exportarlo para action script y attachearlo tambien (esto era lo que me queria evitar je je je) con el siguiente codigo:

Código ActionScript :

function submenu(lista:Array, posx:Number, posy:Number) {
   //desabilita_menu();
   var area_submenu:MovieClip = this.createEmptyMovieClip("area_submenu", 10);
   area_submenu._x = posx;
   area_submenu._y = posy;
   area_submenu.attachMovie("area_tween", "atween", 1);
   area_submenu.atween._x = 100;
   area_submenu.atween._y = 80;
///////ESTO ES LO QUE TUVE QUE AGREGAR//////////////////////////////////////////////
   area_submenu.atween.attachMovie("close_btn", "btn_close", 1);
   area_submenu.atween.btn_close._x = 170;
   area_submenu.atween.btn_close._y = 6;
   area_submenu.atween.btn_close.onRelease = function() {
      this._parent._parent.removeMovieClip();
   };
////////////////////////////////////////////////////////////////////////////
   ////////////////////////////////////////////////////////////////////////////
   for (var i:Number = 0; i<lista[0].length; i++) {
      area_submenu.createEmptyMovieClip("submenu"+i, 10+i);
      area_submenu["submenu"+i]._x = 5;
      area_submenu["submenu"+i]._y = 30*i;
      area_submenu["submenu"+i].createTextField("textarea", 1, 100, 100, 170, 20);
      area_submenu["submenu"+i].textarea.embedFonts = true;
      area_submenu["submenu"+i].textarea.border = false;
      area_submenu["submenu"+i].textarea.text = lista[0][i];
      area_submenu["submenu"+i].dir_url = lista[1][i];
      format_texto(area_submenu["submenu"+i].textarea);
      area_submenu["submenu"+i].onRelease = function() {
         getURL(this.dir_url, "_self");
      };
   }
}
function format_texto(objtext:TextField) {
   var my_fmt:TextFormat = new TextFormat();
   my_fmt.font = "agency";
   my_fmt.letterSpacing = 3;
   my_fmt.color = 0x000000;
   my_fmt.align = "left";
   my_fmt.bold = true;
   my_fmt.kerning = true;
   my_fmt.size = 14;
   objtext.setTextFormat(my_fmt);
}


crei que instanciando el boton dentro del mc que esta en la biblioteca funcionaria, pero como que se pierde la instancia cuando attachas el mc, por eso tuve que quitarlo e importarlo para action script aparte y posteriormente tambien hacerle un attach. como ves? alguna recomendacion que puedas darme? te agradezco mucho tus consejos Jorge.

Por adanpd

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 12 Ago 2009 10:21 am
El attachMovie devuelve una referencia que puedes usar para evitar de paso el lookup de toda la ruta que demanda ciclos de procesador:

Código ActionScript :

var cerrar:MovieClip = area_submenu.atween.attachMovie("close_btn", "btn_close", 1); 
cerrar._x = 170; 
cerrar._y = 6; 
cerrar.onRelease = function() { 
.... etc


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 Ago 2009 10:44 pm
Muchas gracias por tu tiempo Jorge.

Por adanpd

6 de clabLevel



 

msie7

 

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