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

varios sprite en el mismo evento

Estas en el tema de varios sprite en el mismo evento en el foro de Flash y Actionscript en Foros del Web. ¡Hola! Tengo un problemilla que no sé como solucionar. He creado un tablero de juego con casillas. Tengo una función que sabiendo el resultado de ...
  #1 (permalink)  
Antiguo 12/07/2010, 05:39
Avatar de andmai  
Fecha de Ingreso: enero-2010
Mensajes: 84
Antigüedad: 14 años, 3 meses
Puntos: 1
varios sprite en el mismo evento

¡Hola!

Tengo un problemilla que no sé como solucionar.

He creado un tablero de juego con casillas. Tengo una función que sabiendo el resultado de lanzar un dado, ilumina las casillas a las que puede ir la ficha que esté jugando en ese momento. Las casillas iluminadas están adscritas a un evento que al hacer click sobre ellas moverá la fichas hasta estas. El problema es que quiero que solo mueva la ficha hasta la primera casilla en la que se haga click, no que permita hacer click indefinidamente en todas las casillas iluminadas, es decir, que la ficha se mueva a la casilla en la que se ha hecho el primer click y que no se pueda volver a mover hasta el siguiente turno.


El código es este:

Código:
public function calcularMovIzq(f:Ficha,numero:int){
			
			var tab:DibujarTablero=DibujarTablero.getInstancia();
			var lC:Array=tab.getCasillas();
			var c:Casilla=f.getCasilla();
			var i:int;
			var num:int=numero;
			var parar:Boolean=false;
			var cAuxi:Casilla;
			var fila:int=c.getFila();
			var col:int=c.getColumna();
			//Izquierda
			var izq:Boolean=c.getBordeIzq();
			if (izq==false){
				for (i=1;parar==false;i++){
					col--;
					cAuxi=tab.buscarCasilla(col,fila);
					
					izq=cAuxi.getBordeIzq();
					if (izq||i>=numero){
						parar=true;
					}
					num--;
					if (num!=0){
					calcularMovFichaLateral(cAuxi,num);}
					if (cAuxi.getOcupada()==false){
						cAuxi.ponerIluminacion(cAuxi);
						cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}				}
			}
			
		}
		
		public function calcularMovDcha(f:Ficha,numero:int){
			
			var tab:DibujarTablero=DibujarTablero.getInstancia();
			var lC:Array=tab.getCasillas();
			var c:Casilla=f.getCasilla();
			var i:int;
			var num:int=numero;
			var parar:Boolean=false;
			var cAuxi:Casilla;
			var fila:int=c.getFila();
			var col:int=c.getColumna();
			//Izquierda
			var dcha:Boolean=c.getBordeDcha();
			if (dcha==false){
				for (i=1;parar==false;i++){
					col++;
					cAuxi=tab.buscarCasilla(col,fila);
					
					dcha=cAuxi.getBordeDcha();
					if (dcha||i>=numero){
						parar=true;
					}
					num--;
					if (num!=0){
					calcularMovFichaLateral(cAuxi,num);}
					if (cAuxi.getOcupada()==false){
						cAuxi.ponerIluminacion(cAuxi);
						cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);
			}				}
			}
			
		}
		
		public function calcularMovArriba(f:Ficha,numero:int){
			
			var tab:DibujarTablero=DibujarTablero.getInstancia();
			var lC:Array=tab.getCasillas();
			var c:Casilla=f.getCasilla();
			var i:int;
			var num:int=numero;
			var parar:Boolean=false;
			var cAuxi:Casilla;
			var fila:int=c.getFila();
			var col:int=c.getColumna();
			var arriba:Boolean=c.getBordeArriba();
			if (arriba==false){
				for (i=1;parar==false;i++){
					fila--;
					cAuxi=tab.buscarCasilla(col,fila);
					
					arriba=cAuxi.getBordeArriba();
					if (arriba||i>=numero){
						parar=true;
					}
					num--;
					if (num!=0){
					calcularMovFichaLateral(cAuxi,num);}
					if (cAuxi.getOcupada()==false){
						cAuxi.ponerIluminacion(cAuxi);
						cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}				}
			}
			
		}
		
		public function calcularMovAbajo(f:Ficha,numero:int){
			
			var tab:DibujarTablero=DibujarTablero.getInstancia();
			var lC:Array=tab.getCasillas();
			var c:Casilla=f.getCasilla();
			var i:int;
			var num:int=numero;
			var parar:Boolean=false;
			var cAuxi:Casilla;
			var fila:int=c.getFila();
			var col:int=c.getColumna();
			var abajo:Boolean=c.getBordeAbajo();
			if (abajo==false){
				for (i=1;parar==false;i++){
					fila++;
					cAuxi=tab.buscarCasilla(col,fila);
					
					abajo=cAuxi.getBordeAbajo();
					if (abajo||i>=numero){
						parar=true;
					}
					num--;
					if (num!=0){
					calcularMovFichaLateral(cAuxi,num);}
					if (cAuxi.getOcupada()==false){
						cAuxi.ponerIluminacion(cAuxi);
						cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}				}
			}
			
		}

		public function calcularMovFichaLateral(c:Casilla,num:int):void{
			
			var tab:DibujarTablero=DibujarTablero.getInstancia();
			var lC:Array=tab.getCasillas();
			var i:int;
			var parar:Boolean=false;
			var cAuxi:Casilla;
			var fila:int=c.getFila();
			var col:int=c.getColumna();
			//Izquierda
			var izq:Boolean=c.getBordeIzq();
			if (izq==false){
				for (i=1;parar==false;i++){
					col--;
					cAuxi=tab.buscarCasilla(col,fila);
					izq=cAuxi.getBordeIzq();
					if (izq||i>=num){
						parar=true;
					}
					if (cAuxi.getOcupada()==false){
						cAuxi.ponerIluminacion(cAuxi);
												cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}				}
			}
			
			//Derecha
			parar=false;
col=c.getColumna();
			var dcha:Boolean=c.getBordeDcha();
			if (dcha==false){
				for (i=1;parar==false;i++){
 	            	col++;
					cAuxi=tab.buscarCasilla(col,fila);
					dcha=cAuxi.getBordeDcha();
					if (dcha||i>=num){
						parar=true;
					}
if (cAuxi.getOcupada()==false){
					cAuxi.ponerIluminacion(cAuxi);						
					cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}				}
			}
			
			//Arriba
			parar=false;
			fila=c.getFila();
			col=c.getColumna();
			var arriba:Boolean=c.getBordeArriba();
			if (arriba==false){
				for (i=1;parar==false;i++){
					fila--;
					cAuxi=tab.buscarCasilla(col,fila);
					arriba=cAuxi.getBordeArriba();
					if (arriba||i>=num){
						parar=true;
					}
if (cAuxi.getOcupada()==false){
					cAuxi.ponerIluminacion(cAuxi);
					cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}			}
			}
			
			//Abajo
			parar=false;
			fila=c.getFila();
			col=c.getColumna();
			var abajo:Boolean=c.getBordeAbajo();
			if (abajo==false){
			for (i=1;parar==false;i++){
				fila++;
				cAuxi=tab.buscarCasilla(col,fila);
				abajo=cAuxi.getBordeAbajo();
				if (abajo||i>=num){
						parar=true;
					}
					if (cAuxi.getOcupada()==false){
					cAuxi.ponerIluminacion(cAuxi);
											cAuxi.addEventListener(MouseEvent.CLICK,moverFicha);

			}}
			}

		}

public function moverFicha(event:MouseEvent){
			
			var c:Casilla=event.target.parent;
			var cActual:Casilla=this.getCasilla();			
			
			if(cActual.getEntrada()==true){
			salirEstancia(cActual);
		}
			cActual.setOcupada(false);
			c.setOcupada(true);
			this.setCasilla(c);
			var horiz:int=c.getHoriz();
			var ver:int=c.getVer();
			horiz=horiz+10;
			ver=ver+10;
			this.x=horiz;
			this.y=ver;							
			entrarEstancia(c);								
		}

No se como hacer para que una vez clickada una de las casillas, el resto de casillas iluminadas se "borre" del evento para que no se pueda clickar sobre ellas y la ficha se quede en la posicion en la que está.


Muchas gracias
  #2 (permalink)  
Antiguo 12/07/2010, 15:45
 
Fecha de Ingreso: mayo-2010
Ubicación: Argentina
Mensajes: 61
Antigüedad: 14 años
Puntos: 6
Respuesta: varios sprite en el mismo evento

Puedes elimiar la función de un evento de la siguiente manera, supongamos que tiene un clip que se llama clip_mc, para el cual definimos el evento onRelease, prueba esto en un archivo nuevo donde tengas el clip_mc en el escenario:

Código actionscript:
Ver original
  1. clip_mc.onRelease=function()
  2. {
  3.     trace("clic")
  4. }


Luego prueba este otro código:


Código actionscript:
Ver original
  1. clip_mc.onRelease=function()
  2. {
  3.     trace("clic")
  4. }
  5.  
  6. delete clip_mc.onRelease;


Verás que ya no tiene evento onRelease el movieClip clip_mc.


La clave es: delete clip_mc.onRelease


Saludos
__________________
EVO I.T.
Elearning y Desarrollo Web en Argentina.
  #3 (permalink)  
Antiguo 16/07/2010, 05:18
Avatar de andmai  
Fecha de Ingreso: enero-2010
Mensajes: 84
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: varios sprite en el mismo evento

Gracias :)

Etiquetas: sprite, eventos
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




La zona horaria es GMT -6. Ahora son las 10:22.