Comunidad de diseño web y desarrollo en internet online

Problema con la instrucción hitTest

Citar            
MensajeEscrito el 05 Mar 2009 10:31 pm
Tengo un serio problema que no logro resolver, tengo 5 numeros (1,2,3,4,5) todos son mclips y se pueden arrastrar por el escenario, y dispongo de 5 espacios (espacio1,espacio2,etc),al igual mclips pero estos estaticos,el ojetivo es que cada numero haga contacto con el espacio que le corresponde y se quede pegado de lo contrario regrese a su lugar de origen, esto lo he logrado con la instrucción hitTest,if,else if.
El problema radica en que al estar todos los mclips en sus respectivos espacios,si por ejemplo tomo el mclip1 y lo arrastro sobre el espacio5 que ya contiene el mclip5 se aloca o se queda pegado, en lugar de regresarse a su lugar de origen.
Me proporcionaron este codigo pero no logro lo anteriormente descrito.

on (release) {
stopDrag ();
if (_root.producto1.hitTest(_root.clip2) && !_root.producto1.hitTest(_root.producto2) )
{
_root.producto1._x=_root.clip2._x;
_root.producto1._y=_root.clip2._y;
_root.area.text=+texto1.text+"\n"
}
else if (_root.producto1.hitTest(_root.clip3) && !_root.producto1.hitTest(_root.producto2) ) {
_root.producto1._x=_root.clip3._x;
_root.producto1._y=_root.clip3._y;

} else {
_root.producto1._x = _root.producto1inicioX;
_root.producto1._y = _root.producto1inicioY;
}
}

Agradezco cualquier información al respecto....

Por takeshi_coyi

20 de clabLevel



 

safari
Citar            
MensajeEscrito el 06 Mar 2009 01:35 am
:P je, conozco ese codigo.

bueno, para tu caso con 5 movieclips yo creo que tendriamos que intentar otra solucion, el codigo que es para 2 productos, para 5 necesitarias muchas validaciones, lo mejor seria definir, que quieres hacer, quieres que cuando un clip, llege a su respectivo espacio, ¿ya no se pueda mover? o ¿cualquier clip puede entrar en cualquier caja, pero 2 no pueden entrar en la misma caja?

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 06 Mar 2009 03:59 pm
Podria ser cuando un clip, llege a su respectivo espacio, ya no se pueda mover, pero seria muy conveniente que al intentar situar un segundo clip donde no le corresponde sea rechazado,y retorne a su lugar de origen.

Por takeshi_coyi

20 de clabLevel



 

safari
Citar            
MensajeEscrito el 06 Mar 2009 10:18 pm
Ok, entonces los movieclips, todos tienen un lugar, no pueden entrar en nigun otro lugar que no sea el suyo. entonces mira este tutorial y este post.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 06 Mar 2009 10:51 pm
Ok, entonces los movieclips, todos tienen un lugar, no pueden entrar en nigun otro ( SI PUEDEN ENTRAR EN CUALQUIER OTRO LUGAR PERO NO QUEDAR PEGADOS,DE HECHO CUANDO EL OTRO LUGAR ESTA VACIO AL SOLTARLO INMEDIATAMENTE RETORNA SU LUGA DE ORIGEN PERO DE ENCONTRARSE YA OCUPADO POR EL CLIP QUE PERTENECE A ESE LUGAR ES DECIR CLIP1 + ESPACIO1 = OK, EN LUGAR DE RETORNAR A SU LUGAR DE ORIGEN SE QUEDA PEGADO, COSA QUE NO SUCEDE CUANDO SE ENCUENTRA VACIO) lugar que no sea el suyo.

Por takeshi_coyi

20 de clabLevel



 

safari
Citar            
MensajeEscrito el 07 Mar 2009 12:42 am

takeshi_coyi escribió:

[...]PUEDEN ENTRAR EN CUALQUIER OTRO LUGAR PERO NO QUEDAR PEGADOS,DE HECHO CUANDO EL OTRO LUGAR ESTA VACIO AL SOLTARLO INMEDIATAMENTE RETORNA SU LUGA DE ORIGEN[...]


Con eso me refiero a que no pueden entrar en otro lugar que no sea el que tienen designados, si se les suelta en cualquier otro lugar, retornaran a su lugar de origen.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 07 Mar 2009 12:46 am
por ejemplo, un clip, quedaria cimplemente asi:

Código ActionScript :

on (release) {
 stopDrag ();
 //Si el producto esta tocando a la caja 1
 if (_root.producto1.hitTest(_root.caja1) ) 
 {
  //Lo dejamos ahi
  _root.producto1._x=_root.caja1._x;
  _root.producto1._y=_root.caja1._y;
  //Ya no le permitimos moverse
  this.enabled = false;
 } else {//De lo contrario
  //Lo regresamos a su lugar de origen
  _root.producto1._x = _root.producto1inicioX;
  _root.producto1._y = _root.producto1inicioY;
 }
}

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 07 Mar 2009 03:25 pm
huhuhuhu, el codigo de longevie, :) a mi si me funciono pero es como dice, solo para 2 objetos, si tu ideas es hacer muchos ve pensando en otra cosa :), porque si lograras hacer seria un super lio el codigo....

Por lukita26

31 de clabLevel



 

msie
Citar            
MensajeEscrito el 08 Mar 2009 03:16 pm
Estamos mejorando, casi esta comprendida la idea, todo lo anteriormente expuesto es correcto pero falta algo, expongo mas sencillo.
(A) = clipA
(E)= clipE

(A) es arrastrado y soltado donde corresponde, se encuentra en su lugar, y segun la instruccion ya no se movera de su lugar.
El detalle radica en que (E) si es arrastrado por el escenario y con intencion o sin ella se suelta en (A) (espacio ya ocupado por) (A), en lugar de ser abortado, queda pegado en (A).
Insisto falta alguna comprobacion en el codigo, ¿ cual es ?....

Por takeshi_coyi

20 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Mar 2009 03:06 am
:P la verdad, ya no se ni como tienes tu codigo, jeje, mira prepare un ejemplo, crea una nueva pelicula, copia este codigo y pegalo en la pelicula y ejecutala y partimos de este punto, ¿OK? dime si esto es lo que necesitas.

Código ActionScript :

for( var i:Number = 0, aux:MovieClip; i < 5; i++ )
{
   aux = this.createEmptyMovieClip( "objeto" + i, i );
   aux.index = i;
   aux.ex = aux._x = 50;
   aux.ye = aux._y = 50 * i + 10;
   setArea( aux, 60, 35, 100 );
   aux.onPress = function( Void ):Void{ this.startDrag() };
   aux.onRelease = function( Void ):Void
   {
      this.stopDrag();
      if( this.hitTest( this._parent["contenedor" + this.index] ) )
      {
         this._x = this._parent["contenedor" + this.index]._x;
         this._y = this._parent["contenedor" + this.index]._y;
         //Si se desea que el clip ya no pueda regresar a su lugar de origen
         this.enabled = false;
      }
      else
      {
         this._x = this.ex;
         this._y = this.ye;
      }
   };
   aux = this.createEmptyMovieClip( "contenedor" + i, 20 + i );
   aux._x = 150;
   aux._y = 50 * i + 10;
   setArea( aux, 60, 35, 0 )
}


//Dibuja un cuadrado en clip, de ancho w y alto h 
function setArea( clip:MovieClip, w:Number, h:Number, alpha:Number ):Void 
{ 
   //Dibujamos un cuadrado 
   clip.clear(); 
   clip.lineStyle( 1, 0 );
   clip.beginFill( 0, alpha );
   clip.moveTo( 0, 0 ); 
   clip.lineTo( w, 0 ); 
   clip.lineTo( w, h ); 
   clip.lineTo( 0, h ); 
   clip.endFill();    
} 


Suerte.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox
Citar            
MensajeEscrito el 09 Mar 2009 02:43 pm
Todo se origino desde aquí:


on (rollOver) {
this.gotoAndPlay(6);

}
on (rollOut) {
this.gotoAndPlay(11);
stopAllSounds();


}


on (press) {
startDrag("_root.clipA", true);
}
on (release) {
stopDrag();
if (_root.clipA.hitTest(_root.contA)) {
_root.clipA._x = _root.contA._x;
_root.clipA._y = _root.contA._y;
this.enabled = false;
} else {
_root.clipA._x = _root.clipAinicioX;
_root.clipA._y = _root.clipAinicioY;
}
}

Por takeshi_coyi

20 de clabLevel



 

safari
Citar            
MensajeEscrito el 09 Mar 2009 06:08 pm
:P bueno, en el ejemplo que te coloque lo puse para que pudieras ver como se puede hacer con 5 contenedores, es de copiar y pegar en el primerfotograma de una pelicula nueva, solo para efecto de pruebas.

El codigo que posteas, sirve para un clipA y un contA, y si creas un clipB y un contB, funcionara igual, solo hay que cambiar todos los nombres.

Prueba el codigo que te di para que te des una idea, si el clipN no hace hitTest con el contN no se pega, no importa que lo ponga sobre cualquier otro contenedor, este regresara a su posicion incial, pero con el metodo que describes en tu codigo tambien tendrias que tener muchos clipNinicioX y clipNinicioY.

Por LongeVie

Claber

1741 de clabLevel

1 tutorial

Genero:Masculino  

En un lugar, re moto.

firefox

 

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