Ver Mensaje Individual
  #21 (permalink)  
Antiguo 11/06/2010, 06:19
Avatar de andmai
andmai
 
Fecha de Ingreso: enero-2010
Mensajes: 84
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: limite de movimiento startdrag

Muchas gracias a los 2.
Creo que ya sé cual es el problema pero llevo toda la mañna en busca de una solucionk no encuentro...

Mi código ahora mismo está asi:
Código:
package {
	import flash.events.MouseEvent;
	import flash.display.*;
	
	public dynamic class Ficha extends Sprite {

		private var nombre:String;
		private var color:uint;
		private var casilla:Casilla;
		private var bloqueada:Boolean;//Será true cnd no sea el turno de esa ficha
		private var arrastrando:Boolean;
		private var s:Sprite;
		private var s2:Sprite;
		private var s3:Sprite;
		private var s4:Sprite;


		public function Ficha(p_nom:String,p_color:uint,p_bloq:Boolean, p_casilla:Casilla,p_arr:Boolean):void {
			super();
			nombre=p_nom;
			color=p_color;
			bloqueada=p_bloq;
			casilla=p_casilla;
			arrastrando=p_arr;
			
			if (! bloqueada) {
				addEventListener(MouseEvent.MOUSE_DOWN,arrastrar);

				addEventListener(MouseEvent.MOUSE_UP,soltar);
			}
		}

		public function getNombre():String {
			return nombre;
		}

		public function getColor():uint {
			return color;
		}
		public function setNombre(nom:String) {
			nombre=nom;
		}
		public function setColor(col:uint) {
			color=col;
		}

		public function getCasilla():Casilla {
			return casilla;
		}

		public function arrastrar(event:MouseEvent):void {
			this.startDrag();
			arrastrando=true;
			addEventListener(MouseEvent.MOUSE_MOVE,mover);

		}
		public function mover(event:MouseEvent,s:Sprite,s2:Sprite,s3:Sprite,s4:Sprite):void {
			if (arrastrando) {
				restringirArrastre(this,s,s2,s3,s4);
			}
		}

		public function soltar(event:MouseEvent,s:Sprite,s2:Sprite,s3:Sprite,s4:Sprite):void {
			arrastrando=false;
			restringirArrastre(this,s,s2,s3,s4);

			this.stopDrag();
			removeEventListener(MouseEvent.MOUSE_MOVE,mover);

		}

		public function dibujarFicha(x:int,y:int):void {
			var s:Sprite = new Sprite ();
			s.graphics.beginFill(color);
			s.graphics.lineStyle(2,0x800080);
			s.graphics.drawCircle(x,y,8);
			this.addChild(s);
		}

		public function moverArriba(num:int, f:Ficha):void {
			f.y=f.y- (20*num);

		}
		public function moverAbajo(num:int,f:Ficha):void {
			f.y=f.y+ (20*num);
		}
		public function moverIzquierda(num:int, f:Ficha):void {
			f.x=f.x- (20*num);

		}
		public function moverDerecha(num:int, f:Ficha):void {
			f.x=f.x+ (20*num);
		}
		public function getLocalX():Number {
			return x;
		}
		public function getLocalY():Number {
			return y;
		}



		public function restringirArrastre(f:Ficha,s1:Sprite,s2:Sprite,s3:Sprite,s4:Sprite):void {
			if (f.hitTestObject(s1)) {
				f.stopDrag();
			}
			if (f.hitTestObject(s2)) {
				f.stopDrag();
			}
			if (f.hitTestObject(s3)) {
				f.stopDrag();
			}
			if (f.hitTestObject(s4)) {
				f.stopDrag();
			}
		}
}
}


El problema está aquí

public function arrastrar(event:MouseEvent):void {
this.startDrag();
arrastrando=true;
addEventListener(MouseEvent.MOUSE_MOVE,mover); }

la funcion mover tiene 5 parametros, uno el del evento del mouse y los otros 4 los sprite con los que se hará el hitTestObject en restringirArrastre. Supongo k una solucion sería poder ponerle los parametros a mover aqui
addEventListener(MouseEvent.MOUSE_MOVE,mover);

pero no estoy segura de que eso se pueda hacer...
(He estado investigando por la red, y lo que he encontrado es como darle valo a los paramteros en esta sutuacion http://www.yporqueno.es/blog/pasar-p...istener-en-as3 , pero no ponerlo de forma"generica")


Es por esta razon por la que luego la ficha se queda "pegada" al puntero, pork no llega a entrar en la función soltar, ya que ni siquiera ejecuta mover.....


Espero que alguien pueda arrojar un poco de luz sobre todo esto....

Gracias