Comunidad de diseño web y desarrollo en internet online

CLips en Colicion

Citar            
MensajeEscrito el 09 Oct 2008 10:18 pm
Tengo un Problemita cuando quiero hacer colicionar dos Clips ocupando el hitTest... Flash toma el largo y el ancho de el obejeto dentro del clip y forma un rectangulo para actuar como zona activa al colicionar. Pero que pasa cuando el objeto a colicionar no es rectangular ni cuadrado. por ejemplo un circulo, si coliciono un circulo con un circulo Flash entendera que colicionan sin que nesesaria mente un circulo se sobreponga a otro


existe alguna manera de solucionar esto.. intente con mascaras pero no me funciono
y ojala no sea un solucion solo para los circulos
saludos

Por tetsuofox

6 de clabLevel



 

msie7
Citar            
MensajeEscrito el 09 Oct 2008 10:52 pm
El hitTest entre objetos funciona por medio de las "bounding boxes" de estos, si quieres resolver esto, es un poco más complicadillo de lo que piensas, pero debes utilizar hitTest con una coordenada específica, pero para sacar esta coordenada debes sacar algunos cálculos trigonométricos y calcular el punto extremo del borde del círculo pequeño que se encuentra más cerca al extremo del círculo grande, creo que esto te puede servir:

Crea dos círculos con el centro en el medio en la escena, el grande con nombre de instancia "bola" y el pequeño con nombre de instancia "bolita", después pega este código en el primer frame y prueba

Código ActionScript :

bolita.onPress = function():Void{
   
   var iniX:Number = this._xmouse;
   var iniY:Number = this._ymouse;
   
   this.onMouseMove = function():Void{
      
      //---Dar posiciones al círculo
      this._x = this._parent._xmouse - iniX;      
      this._y = this._parent._ymouse - iniY;
      
      //---Posiciones de los dos círculos
      var c1x:Number = this._parent.bola._x;
      var c1y:Number = this._parent.bola._y;
      
      var c2x:Number = this._x;
      var c2y:Number = this._y;
      
      //---Diferencias entre los puntos
      var difX:Number = c1x - c2x;
      var difY:Number = c1y - c2y;
      
      //---Hallar el ángulo
      var rad:Number = Math.atan2(difY, difX);
      
      //---Calcular el punto más cercano a la bola grande
      var hitX:Number = this._x + Math.cos(rad) * (this._width / 2);
      var hitY:Number = this._y + Math.sin(rad) * (this._width / 2);
      
      //---Si la bola grande toca el punto
      if(this._parent.bola.hitTest(hitX, hitY, true)){
         
         trace("se tocaron las bolas");
         
      }
      
      updateAfterEvent();
      
   };
   
}

bolita.onRelease = bolita.onReleaseOutside = function():Void{
   
   delete this.onMouseMove;
   
}


Te he puesto comentarios, léelos con detenimiento para que notes que se ha hecho en cada caso.

Por elchininet

Claber

3921 de clabLevel

17 tutoriales

Genero:Masculino  

Front-end developer at Booking.com

firefox
Citar            
MensajeEscrito el 13 Oct 2008 01:25 am
Muchas Grasias Amigo
inmagine que tendria que ver con trigonometria
se ve un poco complejo eso me motiva.
te dejo estelink para que veas mi trabajo
www.tekkenpro.com

Por tetsuofox

6 de clabLevel



 

msie

 

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