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

Bueno he hallado una solución, aunque no funciona correctamente. Lo que he hecho es crear la calse Linea.as, con la que dibujo las 4 lineas del marco del tablero en la clse Ficha.as de la siguiente manera


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;
		var l:Linea=new Linea(-1,-51,-1,451);
		var l2:Linea=new Linea(-1,451,501,451);
		var l3:Linea=new Linea(501,451,501,-51);
		var l4:Linea=new Linea(501,-51,-1,-51);



		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):void {
			if (arrastrando) {


				restringirArrastre(this);
			}
		}

		public function soltar(event:MouseEvent):void {
			arrastrando=false;


			restringirArrastre(this);
			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):void {
			if (f.hitTestObject(l)) {
				f.stopDrag();

			}
			if (f.hitTestObject(l2)) {
				f.stopDrag();
			}
			if (f.hitTestObject(l3)) {
				f.stopDrag();
			}
			if (f.hitTestObject(l4)) {
				f.stopDrag();
			}
		}}}

De este modo si funciona pero al ejecutarlo sucede una cosa extraña: si muevo la ficha despacio funciona bien, es decir, se queda parada al llegar al borde del tablero, pero si muevo la ficha rapido, traspasa el tablero, haciendo caso omiso a la restriccion...¿Por qué puede ser esto?


Gracias