Comunidad de diseño web y desarrollo en internet online

_root["menu"+menusob].onRollOver=function() ???

Citar            
MensajeEscrito el 09 Abr 2007 11:48 am
puedo hacer esto?:

Código :

_root["menu"+menusob].onRollOver=function()


se que

Código :

menu1.onRollOver=function()
funciona

se que

Código :

_root.menu1.onRollOver=function()
funciona

pero no quiero tener que escribir la funcion para cada uno de los elementos de menus que tengo...
puedo hacerlo o me toca hacer una funcion para cada uno que tengan lo mismo pero con la diferencia del numero de menu?

la funcion de momento solo tiene esto:

en el MC del menu1 tengo este codigo:

Código :

on(rollOver){
   _root.menusob=1;
}


en la capa acciones tengo este otro:

Código :

menusob=_root.menusob;
_root["menu"+menusob].onRollOver=function(){
   trace("encima de menu "+menusob);
   menu1._height+=2;
   menu1._width+=2;
}


que es el que da fallos excepto si lo hago de una de las dos formas que he mencionado arriba.
otra solucion seria hacer el codigo dentro de cada mc que forman los elementos del menu, pero me tocaria teclear lo mismo para cada elemento y ademas tener el codigo disperso, que dificulta su entendimiento pasado un tiempo desde la progrmacion...

no se si me he explicado bien...espero que si y que se pueda hacer
gracias de antemano
un saludo a tod@s
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 09 Abr 2007 03:35 pm
Utiliza prototipos, como el siguien te ejemplo

Código :

MovieClip.prototype.sobre = function(instancia:Number)  {
this.onRollOver=function(){
   trace("encima de menu "+instancia);
   this._height+=2;
   this._width+=2;
}
}
_root["menu"+menusob].sobre(menusob);

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 09 Abr 2007 06:53 pm
huau...no conocia de lo existencia de esos prototipos, pero vienen genial, son como definir una clase padre y hacer herencia. me viene al pelo eso que me explicas la verdad...tendre que abrir la ayuda y leermela con calma y hacer un par de ejemplos antes de ir a mi codigo.

muchisimas gracias bryanisimo, ya van tres cables, pronto tendre que mencionarte en todas mis paginas como ayuda indispensable :D:D:D

un saludo a tod@s
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 09 Abr 2007 09:27 pm
Luego te paso el numero de cuenta para hacer los depositos XD

No te creas ;)

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 10 Abr 2007 11:31 am
buenas de nuevo bryanisimo, pensaras que menudo pesado que soy...es cierto, pero es que me hace una cosa rara...si pudieras echarle un vistazo a la url temporal donde tengo colgada la web para hacer pruebas y vieras lo que pasa con relacion a onRollOver, te lo agradeceria muchisimo.

el problema esta en que nada mas arrancar la web, si pones el puntero sobre el boton no hace nada, pero al quitarlo si que lo reduce en 2 de alto y de ancho y luego lo vuelve a agrandar y lo hace bien todo el rato (excepto cuando ya estan rotados los menus que solo modifica el _width...pero eso me importa menos...lo que me parece super raro es que la primera vez no lo haga... no se...aqui te pego el codigo que tengo hecho para la capa acciones:

Código :

////////////////////////////////////////
//DEFINICION DE VARIABLES
////////////////////////////////////////
Stage.scaleMode = "exactFit";
//esta varible nos dira el menu seleccionado, pero hay que inicializarla a 0
//para que este a la espera de un click de raton sobre algun elemento de menu
_root.menusel=0;
////////////////////////////////////////
//DEFINICION DE FUNCIONES
////////////////////////////////////////
function moverbarra()
{
   if ((_root.menusel!=0) && (_root.barra._x > 75))         
      _root.barra._x-=20;
}
function redimensionar_titulo(nummenu)
{
   if ((_root.menusel!=0) && (_root["menu"+nummenu]._rotation>-90))
   {
         _root.titulo._xscale -=4;
         _root.titulo._yscale -=4;
         _root.titulo._y+=9;
         _root.fondo_titulo._xscale-=13;
         _root.barra._x-=10;
   }
}
function rotar_menus(num_men,posX,posY,aniadido)
{
   //este if nos rota y nos posiciona el menu principal que se ha seleccionado
   //cuando se clickea sobre el y para rotar y posicionar el boton del menu
   if (_root.menusel!=0) 
   {
      if (_root["menu"+num_men]._rotation>-90)
      {
         _root["menu"+num_men]._rotation-=9;
         //esto es para escalar y reposicionar los botones de menu, 
         //el titulo y el fondo del titulo
         _root["menu"+num_men]._xscale -=4;
         _root["menu"+num_men]._yscale -=4;
      }
      if(_root["menu"+num_men]._x>posX)
         _root["menu"+num_men]._x-=24;
      if(_root["menu"+num_men]._y<posY)
         _root["menu"+num_men]._y += 10+aniadido;
   }
}
/*function barra_ajustada()
{
   barra._height=Stage.height;
   barra._x=(Stage.width/2)-(barra._width/2);
}*/
////////////////////////////////////////
//DEFINICION DE CLASES
////////////////////////////////////////
MovieClip.prototype.sobre = function()  {
   this.onRollOver=function()
   {
      this._height+=2;
      this._width+=2;
   }
   this.onRollOut=function()
   {
      this._height-=2;
      this._width-=2;
   }
}

////////////////////////////////////////
//CUERPO DEL PROGRAMA
////////////////////////////////////////

_root.onEnterFrame=function()
{
   _root["menu"+_root.menusob].sobre(_root.menusob);
   redimensionar_titulo(1);
   moverbarra();
   switch(_root.menusel)
   {
      case 1:
         rotar_menus(1,5,180,0);
         rotar_menus(2,65,380,10);
         break;
      case 2:
         rotar_menus(2,5,180,0);
         rotar_menus(1,65,380,10);
         break;
   }
}


el codigo propio de los MC's es realmente estupido y no creo que tengas problema en adivinar que los valores de menusob y menusel se los doy en los eventos on(Release) y on(rollOver) de cada MC respectivamente

a ver si ves algo raro o la razon por la que no funciona el primer rollOver. si quieres probar la rotacion, solo tienes que clickear sobre el primer elemento de menu. el segundo todavia no esta implementado correctamente y se coloca un poco mal...tengo que seguir haciendo pruebas.

la url de la web es http://maije2.iespana.es/

por cierto, me han dicho que en los elementos de menu no aparecen letras y deberia aparecer:
1 Puentes, en el primer elemento de menu
2 Otros, en el segundo
si no aparece dimelo tambien por favor a ver si encuentro el error...

un saludo
gracias por adelantado
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox
Citar            
MensajeEscrito el 11 Abr 2007 03:29 am
Pues parece que no funciona eso :S entro a una seccion y ya no se puede mover el menú. bueno creo que el problema puede estar aquí:

Código :

_root.menusel=0;
//cambialo por
menusel=0;


ademas estas usando el código del diablo XD

Código :

_root.onEnterFrame=function()

te recomiendo que le des una buscada a la clase Tween, así te puedes ahorrar mucho código y tienes mejores resultados, puedes ocuparla para:
_x, _y, _alpha, _rotation y se ve muy bien.

http://www.webintenta.com/la-clase-tween-parte-1.html
http://www.webintenta.com/la-clase-tween-parte-2-creacion-de-un-rollover-avanzado.html

Bueno suerte y has menos desastre en tus códigos :)

Por bryanisimo

664 de clabLevel



Genero:Masculino  

Geek

firefox
Citar            
MensajeEscrito el 11 Abr 2007 09:26 am
acabo de ver la luz con la funcion Tween. es EXACTAMENTE lo que estaba buscando. lo que yo he implementado a lo cutre para rotar un objeto, esa funcion me lo hace y me ahorra tener que programarla para cada vez que quiera mover objetos, rotarlos, etc...que gustazo de funcion... y encima permite controlar el tiempo de duracion, si quieres expresarlo en frames o en segundos, bueno bueno bueno...vaya alegria que me has dado... :cry: :lol: se que me la mencionaste en tu primera respuesta, pero al final la vagancia me pudo y no busque acerca de ella, pero ahora que me ponias enlaces directos a demostraciones y explicaciones de la funcion, no tenia excusa :oops: :oops:
en cuanto a lo de los _root's que habia en el codigo, es por puro desconocimiento...empece con el flash directamente, sin hacer los tutoriales, sin leerme las ayudas, solo programando y para mi fue un hallazgo el encontrar cosas como 'trace' , _root, o this...autenticas alegrias la verdad...pero que al fin y al cabo no se usar...las entiendo cuando las veo por ahi, pero cuando un codigo me falla, pruebo con todo lo que me parezca "minimamente" logico a ver si es ese el problema...pero no porque conozca realmente la sintaxis ni nada de eso...la verdad es que ese problema me limita muchisimo, pero es que no he tenido tiempo de empollarla y lo voy haciendo sobre la marcha, por ejemplo con lo de la funcion Tween...pues son cosas que me dice la gente en los foros y que voy aprendiendo a usar...de hecho, en los ultimos 6 años no habia programado orientado a objetos...y se dice pronto... he cumplido 24 años el 21 de marzo y vi lo que era la programacion orientada a objetos en un cursillo de 950 horas de programacion que hice al terminar el instituto y desde entonces no habia vuelto a hacerlo (por cierto, se me daba fatal :D:D:D). asi que disculpa las burradas que puedas encontrar en mi codigo AS, porque decir que soy un newbie es quedarse MUY corto.
:lol:
PD: ya cambie el codigo de los _root :) y cuando lo pongo es con la intencion de que sea visible desde cualquier parte del programa y no se si eso sera lo que hace el _root, pero me la jugue :oops:
agradezco muchisimo tu ayuda, porque gracias a esas pequeñas cosillas, voy tirando para adelante con mis conocimientos de flash y AS

un saludo
atentamente
maije

Por maije

Claber

104 de clabLevel



Genero:Masculino  

Valladolid

firefox

 

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