Foros del Web » Creando para Internet » Flash y Actionscript »

guardar instancia en una variable y usarla en una sola funcion

Estas en el tema de guardar instancia en una variable y usarla en una sola funcion en el foro de Flash y Actionscript en Foros del Web. Resulta que estoy haciendo un mapa, en el cual cada pedacito que lo compone tiene su animacion propia y se activa cuando se pone el ...
  #1 (permalink)  
Antiguo 27/05/2009, 18:19
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta guardar instancia en una variable y usarla en una sola funcion

Resulta que estoy haciendo un mapa, en el cual cada pedacito que lo compone tiene su animacion propia y se activa cuando se pone el mouse sobre cada uno (se levanta y brilla).
Encontre hace algunas horas un codigo para usar solo clips de pelicula animados, y hacerlos crecer mediante una funcion,y asi para evitar crear botones y tener poner automaticamente el efecto del raton modificando esa etapa (la del raton encima).
El problema radica en que son demasiados pedazos como para repetir la funcion de cada uno, que si son varias lineas de codigo y estoy buscando una forma de escribir una sola funcion para todos, es decir, quiero encontrar una forma de que la funcion reconozca el clip sobre el que me estoy posicionando y se ejecuten las acciones de la funcion para ese clip.

Para ser mas claro, aqui esta el codigo de un solo clip (el codigo está en el primer frame de la capa donde estan los clips):

Cita:
//este codigo es para hacer que cresca un objeto instaciado con actionscript 2
//cuando se le pase el raton por encima, y que se reproduzca su propia animacion

mc342.onRollOver=function(){//Empieza la funcion RollOver
//mc342 es la instancia del clip que crecera cuando se pase el raton
numero.text="342";
//'numero' un texto dinamico al que le agrego el nombre del terreno que se maneja

this.gotoAndPlay(2);//una linea para hechar andar el clip, nada importante
this.swapDepths(1);//para posicionar hasta arriba el clip

this.onEnterFrame=function(){//codigo para crecer
if(this._xscale<130){//que escala crecerá
this._xscale=this._yscale=this._xscale+3}
else{delete this.onEnterFrame}}}

mc342.onRollOut=function(){//cuando se quita el raton codigo para decrecer
this.onEnterFrame=function(){
this.gotoAndPlay(11);
if(this._xscale>100){
this._xscale=this._yscale=this._xscale-3}
else{delete this.onEnterFrame}}
}//aqui termina la funcion del RollOver
el problema como dije antes, es que tengo muchos pedacitos o clips independientes y para cada uno he decidido crear el mismo codigo una y otra vez... y ya llevo como 500... me estoy desesperando...

lo que quiero es hacer UNA SOLA VEZ esa funcion, y tener alguna forma de que dicha funcion reconozca el movie clip sobre el que estoy, algo como usar un listener de algun tipo y guardar el nombre de instancia del mc ('mc342' por ejemplo) y usar el valor de la variable dentro de la funcion... pero aun no doy con la solucion o la sintaxis

agradecere sugerencias...


Una cosa mas, podria haber hecho crecer de uno en uno los clips pero queria adentrarme en el mundo del actionscript porque crei que seria mas facil, ademas de que con ese codigo el crecimiento es exacto para cada objeto y eso me gusta.

Gracias de nuevo
  #2 (permalink)  
Antiguo 27/05/2009, 19:14
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años, 11 meses
Puntos: 51
Respuesta: guardar instancia en una variable y usarla en una sola funcion

mira es facil
supongamos que tienes 500 mc llamados así mc1,mc2,mc3,mc4 la función seria así

Código PHP:
for (var 1i<=500i++) {
    
addBotonFun(this['mc'+i],i);
}

function 
addBotonFun(Botonid) {
    
Boton.onRollOver = function() {//Empieza la funcion RollOver
        //mc342 es la instancia del clip que crecera cuando se pase el raton
        
numero.text id;
        
this.gotoAndPlay(2);//una linea para hechar andar el clip, nada importante
        
this.swapDepths(1);//para posicionar hasta arriba el clip
        
this.onEnterFrame = function() {//codigo para crecer
            
if (this._xscale<130) {//que escala crecerá
                
this._xscale this._yscale=this._xscale+3;
            } else {
                
delete this.onEnterFrame;
            }
        };
    };

    
Boton.onRollOut = function() {//cuando se quita el raton codigo para decrecer
        
this.onEnterFrame = function() {
            
this.gotoAndPlay(11);
            if (
this._xscale>100) {
                
this._xscale this._yscale=this._xscale-3;
            } else {
                
delete this.onEnterFrame;
            }
        };
    };

__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #3 (permalink)  
Antiguo 28/05/2009, 08:30
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

Usar un ciclo me parece una muy buena idea (como no se me ocurrio), voy a intentarlo...

Muchas gracias por tu rápida respuesta
  #4 (permalink)  
Antiguo 28/05/2009, 08:40
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

Algo que se me olvido decir:

Me van a pasar mas mapas ya echos por alguien mas

¿que pasa si ya creamos todos los movie clips y tienen nombres exoticos y muy diferentes (el nombre de los paises por ejemplo)?

Aqui ya no podria usar el ciclo for porque tendria necesariamente cambiarle el nombre de instancia a cada uno, o usar mi metodo anterior ...

¿existe una forma diferente que el ciclo?

Última edición por Mojorochi; 28/05/2009 a las 12:16
  #5 (permalink)  
Antiguo 28/05/2009, 11:06
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años, 11 meses
Puntos: 51
Respuesta: guardar instancia en una variable y usarla en una sola funcion

bueno pues si que hay aunque también algo laboriosa mira si tienes tienes con diferentes nombre los puedes meter en un Array como si fuera una lista ejemplo

Código PHP:
var paises:Array=new Array(mcecuador,mcperu,mccolombia,mcchina)
 for (var 
i=0;i<paises.length;i++){

      
addBotonFun(paises[i],i);

}
function 
addBotonFun(Botonid) {
    
Boton.onRollOver = function() {//Empieza la funcion RollOver
        //mc342 es la instancia del clip que crecera cuando se pase el raton
        
numero.text id;
        
this.gotoAndPlay(2);//una linea para hechar andar el clip, nada importante
        
this.swapDepths(1);//para posicionar hasta arriba el clip
        
this.onEnterFrame = function() {//codigo para crecer
            
if (this._xscale<130) {//que escala crecerá
                
this._xscale this._yscale=this._xscale+3;
            } else {
                
delete this.onEnterFrame;
            }
        };
    };

    
Boton.onRollOut = function() {//cuando se quita el raton codigo para decrecer
        
this.onEnterFrame = function() {
            
this.gotoAndPlay(11);
            if (
this._xscale>100) {
                
this._xscale this._yscale=this._xscale-3;
            } else {
                
delete this.onEnterFrame;
            }
        };
    };

bueno quedaría asi mas o menos
__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #6 (permalink)  
Antiguo 28/05/2009, 14:58
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

Creo que tambien es una buena opcion

Entiendo lo que se trata de hacer con el codigo, pero como soy un novato (empece apenas ayer con actionscrip) no comprendo todo muy bien todavia (estuve todo el dia confuso en internet buacando soluciones para distintos problemas y siempre me salian soluciones en distintas versiones y a ves tras ves tenia problemas de migracion que apenas estoy comprendiendo).

y alla arriba dice php y no se si haya algun problema con eso... supongo que son compatibles (o lo mismo) aunque veo algunos ';'(punto y coma) por ahi que yo no tenia...

¿no hay problema con eso?
  #7 (permalink)  
Antiguo 28/05/2009, 15:13
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

Voy a generar otro tema, tu me diste una solucion factible pero aun asi no es exactamente lo que yo busco.

Yo quiero interactuar mas con los parametros y los comandos de actionscript para aprendermelos rapido.

Gracias por tu ayuda!.
  #8 (permalink)  
Antiguo 29/05/2009, 08:35
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

No pude... ¿No sabras hacerlo con actionscript 3?... ni el 2 ni el 3 me reconocen el addBotonFun, y yo no se que sea exactamente

Cita:
for (var i = 1; i<=10; i++) {
addBotonFun(this['mc'+i],i);
}

function addBotonFun(Boton, id) {
Boton.addEventListener(MouseEvent.ROLL_OVER, accion1);
function accion1(event:MouseEvent):void
{
Boton.parent.setChildIndex(uno, uno.parent.numChildren-1);
Boton.play();
}
}
Podrias explicarme un poco el codigo y corregirlo si se puede (lo hice mas sencillo)
  #9 (permalink)  
Antiguo 01/06/2009, 12:36
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

addBotonFun: no hay algo semejante en as3
  #10 (permalink)  
Antiguo 01/06/2009, 12:47
Avatar de Lynxcraft  
Fecha de Ingreso: noviembre-2007
Ubicación: yecla murcia
Mensajes: 1.346
Antigüedad: 12 años, 11 meses
Puntos: 51
Respuesta: guardar instancia en una variable y usarla en una sola funcion

utiliza el Tween pasa hacer la animación de escala progresiva XDXD

Código PHP:
import fl.transitions.Tween
var paises:Array=new Array(mcecuador,mcperu,mccolombia,mcchina)
 for (var 
i=0;i<paises.length;i++){

      
addBotonFun(paises[i],i);

}
function 
scala(event:Event):void{
    var 
mc=event.currentTarget
    
var tx:Tween=new Tween(mc,"scaleX",null,mc.scaleX,2,2,true)
    var 
ty:Tween=new Tween(mc,"scaleY",null,mc.scaleY,2,2,true)
}
function 
restascala(event:Event):void{
    var 
mc=event.currentTarget
    
var tx:Tween=new Tween(mc,"scaleX",null,mc.scaleX,1,2,true)
    var 
ty:Tween=new Tween(mc,"scaleY",null,mc.scaleY,1,2,true)
}
function 
addBotonFun(Botonid) {
   
Boton.addEventListener(MouseEvent.MOUSE_OVER,scala)
   
Boton.addEventListener(MouseEvent.MOUSE_OUT,restascala)

__________________
Sobran las ideas cuando faltan ganas de trabajar en ellas
Lynxcraft
  #11 (permalink)  
Antiguo 01/06/2009, 13:05
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

mmmm...

no entiendo bien, pero lo pruebo y si necesito algo mas yo aviso.
  #12 (permalink)  
Antiguo 06/06/2009, 08:55
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

ya vi lo que hace el codigo y me facilita la vida, pero...

¿no habra una forma de hacer la animacion mas rapida?
  #13 (permalink)  
Antiguo 06/06/2009, 11:19
Avatar de Mojorochi  
Fecha de Ingreso: mayo-2009
Mensajes: 40
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: guardar instancia en una variable y usarla en una sola funcion

bueno, al final ya me adapte

function terminar(event:Event):void{
event.currentTarget.tes.text='' ;
var mc=event.currentTarget
var tx:Tween=new Tween(mc,"scaleX",null,mc.scaleX,1,0.2,true)
var ty:Tween=new Tween(mc,"scaleY",null,mc.scaleY,1,0.2,true)
}

solo tenia que modificar ese valor que son los segundos que tarda en crecer y decrecer.

Te dare karma en cuanto reparta mas karma en otros usuarios xd
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:48.