Comunidad de diseño web y desarrollo en internet online

bloquear drag

Citar            
MensajeEscrito el 02 Sep 2009 11:57 pm
hola tengo una aplicacion que es tipo rompecabezas, en el cual tengo n movieclips llamados f1,f2,f3...fn, estos corresponden a las fichas, dentro de cada uno de ellos tengo otro mc que se llama ancla. en el escenario tambien hay mas mc llamados a1,a2,a3,....an , estos son puntos clave para que cada ancla de algun "f" al chocar con su respectivo "a", tome ese lugar: ejemplo
f1.ancla debe quedar con a1. tengo un archivo externo llamado Arrastre.as y todas las fichas están asociadas a esta clase para permitir su arrastre.
este es la clase que arrastra las fichas. funciona bien

Código :

 class Arrastre extends MovieClip {
    
 function Arrastre() {
 onPress=Arrastrar;
 onRelease=Soltar;
 }

 private function Arrastrar():Void{
 startDrag(this,true,260,90,945,540);
 }
 private function Soltar():Void{
 this.stopDrag();
 }
 
 private function acierto():Void{
     this.stopDrag();
 this.enabled = false;
 }

}

a continuacion está el codigo de verificacion de colisiones:

Código :

var a=0;
for(i=1;i<=20;i++)
{
   
if(this["f"+i].ancla.hitTest(this["a"+i])){
   this["f"+i].acierto();
   
   this["f"+i]._x=this["a"+i]._x;
   this["f"+i]._y=this["a"+i]._y;
   this["f"+i]._alpha=100;
   this["f"+i].ancla._visible=false;
   
   //this["a"+i]._visible=false;
   a++;
   
}

}

if (a==20)
gotoAndPlay("gana");

la variable a es para saber que todas las piezas ya han sido colocadas en su lugar. y todo lo hace bien,ahora lo que quiero es que cuando cada pieza tome su lugar, esta pieza ya no se pueda arrastrar con el mouse, y no logro hacer eso.

Por elykcir

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Sep 2009 07:39 am
Hola,
prueba a añadir un nuevo método a la clase Arrastre que elimine los eventos onPress y onRelease cuando la pieza esté bien colocada:

Código ActionScript :

public function inmovilizar():Void
{
   delete(this.onPress);
   delete(this.onRelease);
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 05 Sep 2009 02:58 pm

isidoro escribió:

Hola,
prueba a añadir un nuevo método a la clase Arrastre que elimine los eventos onPress y onRelease cuando la pieza esté bien colocada:

Código ActionScript :

public function inmovilizar():Void
{
   delete(this.onPress);
   delete(this.onRelease);
}


amigo, muchas gracias pero no me funcionó, agregue esa funcion a la clase, y en el rompecabezas lo puse asi:

Código :

for(i=1;i<42;i++){
if(this["f"+i].ancla.hitTest(this["a"+i])){
   j=i;
   this["f"+i].inmovilizar(); //aqui lo mando a llamar cuando está colocada la pieza
   this["f"+i]._x=this["a"+i]._x;
       this["f"+i]._y=this["a"+i]._y;
       this["f"+i]._alpha=100;
        this["f"+i].ancla._visible=false;
        a++;
}

y lo que hace es que la pieza se queda pegada al cursor y lo anda siguiendo por siempre, despues probe dentro de la funcion inmoviliza ponerle This.stopDrag(); y lo que hace es dajrla en su lugar , pero las demas piezas ya no pueden ser arrastradas, yo creo que el problema está en el for, y eso es lo que aplica esa funcion a todas las piezas indebidamente, ahora como le hagoooo???

Por elykcir

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2009 03:01 pm
ya lo logreeee, en la funcion que me pusiste solo le quite el this.delete(onRelease)
y funciona a la perfeccion, muchas gracias por tu ayuda, gracias gracias.

Código :

public function inmovilizar():Void {    delete(this.onPress);     } 

asi quedo la nueva funcion en la clase.

Por elykcir

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 05 Sep 2009 03:18 pm
ok, acabo de encontrar otro error, y es que si paso la ficha encima del lugar indicado y la sigo arrastrando y la suelto en otro lugar, pues la ficha se quedara en ese lugar para siempre ya no se puede rectificar, entonces lo que necesito es que cuando pase por el lugar la ficha se quede quieta aunque yo no haya liberado el boton del mouse, que mas puedo hacerr???
por favor ayuda

Por elykcir

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 06 Sep 2009 09:24 pm
Hola,
yo lo que haría es gestionar todo dentro de la clase del objeto ficha. Pásale al constructor de cada objeto ficha su correspondiente clip "a", y dentro del método "soltar" puedes gestionar todo lo que haces en el bucle for(i=1;i<42;i++)

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.