Comunidad de diseño web y desarrollo en internet online

Arrastras objetos (instancias) evitando que se sobrepongan entre si

Citar            
MensajeEscrito el 07 May 2011 03:39 pm
Tengo cuatro Cuadros, (obj1,obj2 obj3 y obj4). Quisiera poder arrastrar (drag) cualquiera de ellos sin que se sobrepongan unos con otros.

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 09 May 2011 02:23 pm
Si quieres que no se superpongan al soltarlos, mirate la propiedad dropTarget, indica sobre que elemento ha sido soltado un MC (deberías chequear que sea vacío)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 May 2011 06:40 pm
Muchas gracias por tu ayuda.

hasta ahora tengo esto:

Código ActionScript :

on(press){
   this._parent.startDrag();
   }
   
on(release){
   this._parent.stopDrag();
   }

onClipEvent(enterFrame){
   for(i=1;i<=4;i++){
   if (eval(this._parent._droptarget) == this._parent._parent["obj"+i+"_mc"]){
   this._parent.stopDrag();
   }
               
}
}

Este codigo esta dando resultado, pero el arrastre de los mc se detiene cuando los bordes del mc arrastrado choca con el centro de otro mc.

Quisiera saber si puedo usar esta propiedad para lograr que el arrastre de un mc se detenga justo en el sitio dondo sus bordes chocan con el borde de otro mc, siendo los mc intancias de la misma clase. Es decir: obj1_mc, obj2_mc, obj3_mc y obj4_mc.

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 May 2011 06:57 pm
Entonces en vez de dropTarget tienes que usar hitTest

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 10 May 2011 07:10 pm
Lo he intentado pero al hacerlo con ciclos for, no puedo arrastrar niguno de los mc.

Este es el codigo para que me digas por favor que estoy haciendo mal:

on(press){
this.startDrag();

for(i=1;i<=4;i++){
if (this.hitTest(_root["obj"+i+"_mc"])){
this.stopDrag();
}
}
}

on(release){
this.stopDrag();
}

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 May 2011 07:19 pm
No, en el código tal cual lo pusiste antes reemplaza la línea

if (eval(this._parent._droptarget) == this._parent._parent["obj"+i+"_mc"]){

por

if (this.hitTest(_root["obj"+i+"_mc"]){

No se si las rutas están bien, pero prueba

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 May 2011 03:16 am
No resulta, pareciera que el lenguaje aplica el stopDrag a todos los mc, incluyendo al que intento arrestrar.

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 May 2011 01:40 pm
Tanto el startDrag como el stopDrag se aplican a un solo MC, es un límite de Flash mismo, no se puede arrastrar más de un objeto a la vez. Entonces cuando detecta colisión, lo deja de arrastrar, si ese no es tu objetivo, explícate

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 May 2011 03:42 pm
Para que tengas una idea practica de lo que quiero hacer, imaginate un cuarto donde tienes varios graficos que representan muebles, y que puedas acomodarlos en el cuarto a tu antojo. Al arrastrar los muebles a lo largo del cuarto seria poco practico si el programa te permitiera colocar un mueblo sobre el otro. Lo mas logico es que el arrastre del mueble se detenga justo cuando esta al lado de otro mueble. Esto es basicamente lo que intento hacer pero no con cuatro muebles (mc), sino con mas de 200 muebles ( mc). Estoy buscando el codigo haciendo pruebas con solo cuatro mc para ser mas practico. Algo que debo recalcar aqui es que necesito hacer el codigo para arrastrar mc y no para mover los mc con las teclas direcionales.

Muchas gracias por tu interes en ayudarme.

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 May 2011 03:45 pm
Ok, no entiendo el problema, con hitTest arrastras el MC pero no te lo deja poner encima porque deja de arrastrar, no es ese el objetivo?

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 May 2011 03:49 pm
Exactamente. Deberia funsionar pero al probar el codigo no me permite arrastrar ningun objeto.

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 May 2011 03:53 pm
Entonces estás haciendo un hitTest incorrecto, por ejemplo contra el fondo o algo que colisiona todo el tiempo, por eso el hitTest da true

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 May 2011 03:58 pm
Este es el codigo que esta en cada mc:

on(press){
this.startDrag();
}

on(release){
this.stopDrag();
}

onClipEvent(enterFrame){
for(i=1;i<=4;i++){
if (this.hitTest(_root["obj"+i+"_mc"])){
this.stopDrag();
}

}
}

Por marcosulloa

4 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 May 2011 06:09 pm
¿Está el clip en la misma línea de tiempo que el MC contra el que colisiona? Agrega un trace para ver si está colisionando o es otra cosa>

Código ActionScript :

if (this.hitTest(_root["obj"+i+"_mc"])){
  trace("Colisiona con "+_root["obj"+i+"_mc"])
  ...


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

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