11/06/2010, 11:18
|
| | | 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 |