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