10/06/2010, 13:16
|
| | | Fecha de Ingreso: enero-2010
Mensajes: 84
Antigüedad: 14 años, 11 meses Puntos: 1 | |
Respuesta: limite de movimiento startdrag Cita:
Iniciado por mariox55 Ese metodo ( restringirMovTab() ) debieses llamarlo dentro de un evento de Ficha (ya que de la clase Ficha instanciaras varios objetos que representan Ficha's). Ese evento debe funcionar de manera análoga al evento onMouseMove de MovieClip (de as2), es decir, el evento tiene que detectar que el mouse se esta moviendo para que por cada vez que se mueva se llame al metodo para hacer la comprobación de colisión y así poder aplicar la restricción a la ficha (restringir su posición).
al parecer este es el evento: http://livedocs.adobe.com/flash/9.0_...vent:mouseMove
Espero haber sido claro ;D
Mis saludos. Muchas gracias mario, pero no se si te he entendido muy bien. He hecho lo siguiente:
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;
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);
addEventListener(MouseEvent.MOUSE_MOVE,mover);
}
}
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;
}
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();
}
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)){
removeEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
}
if(f.hitTestObject(s2)){
removeEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
}
if(f.hitTestObject(s3)){
removeEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
}
if(f.hitTestObject(s4)){
removeEventListener(MouseEvent.MOUSE_DOWN,arrastrar);
}
}
}
}
luego en el .fla llamo a restringirArrastre pero lo unico k consigo es que una vex clickada la ficha no se pueda soltar, es decir, que se queda "pegada" al puntero del raton....
Me podrias decir que he hecho mal por favor?
gracias |