Comunidad de diseño web y desarrollo en internet online

Choque entre 2 piezas

Citar            
MensajeEscrito el 25 Ago 2006 10:27 am
Me gustaría saber alguna forma sencilla para realizar un choque entre 2 piezas. He probado con hitTest, pero si pongo 2 pelotas, chocan como si fueran cuadrados... chocan con las esquinas que no tienen... y eso no me sirve... querría que chocaran como pelotas que son :cry:

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 25 Ago 2006 11:11 am
Flash solo detecta cuadros a la hora de detectar colisiones, si quieres detectar si dos circulos colisionan debes utilizar matemáticas.

Dani de After-Hours creó esta fórmula, espero que te sirva.

Código :

circleHitControl = function (mc1, mc2) {
   // formula de DANI de after-hours
   difx = Math.abs(mc1._x-mc2._x);
   dify = Math.abs(mc1._y-mc2._y);
   dist = Math.sqrt((difx*difx)+(dify*dify));
   // 
   if (dist<=mc1._width/2+mc2._width/2) {
      hit = true;
   } else {
      hit = false;
   }
};
c1Mc.onPress = c2Mc.onPress=function () {
   this.startDrag();
   this.interval = setInterval(circleHitControl, 50, c1Mc, c2Mc);
   this.swapDepths(depth+1);
};
c1Mc.onRelease = c1Mc.onReleaseOutside=c2Mc.onRelease=c2Mc.onReleaseOutside=function () {
   stopDrag();
   clearInterval(this.interval);
};


Deu!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

firefox
Citar            
MensajeEscrito el 25 Ago 2006 11:58 am
De hecho hay una funció que sirve para piezas de cualquier forma:

Código :

function checkHit(a:MovieClip, b:MovieClip) {
   with (a) {
      if (b.hitTest(getBounds(_root).xMax, _y, true)) {
         return "left";
      } else if (b.hitTest(getBounds(_root).xMin, _y, true)) {
         return "right";
      } else if (b.hitTest(_x, getBounds(_root).yMax, true)) {
         return "up";
      } else if (b.hitTest(_x, getBounds(_root).yMin, true)) {
         return "down";
      } else {
         return false;
      }
   }
}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 25 Ago 2006 12:24 pm
Muchísimas gracias a los 2.
zah, eso es exactamente lo que me hacía falta :D Muchísimas gracias ^^

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 25 Ago 2006 12:29 pm
Aún tengo un problemilla :S ¿Qué función tiene el código de zah? que ocurre? como puedo cambiar lo que hace?

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 25 Ago 2006 12:36 pm
Zah, esa forma que utilizas está bien, pero la que he puesto yo es MUCHO más exacta, haz la prueba y ya lo verás.

Lo malo es que de esa forma sólo puedes hacer colisiones entre círculos.

Deu!! ^^

Por Elecash

Claber

8126 de clabLevel

37 tutoriales
19 articulos
13 ejemplos

  Bastard Operators From Hell Desarrollador de GAIA Premio_Secretos Héroes

BarnaCity

firefox
Citar            
MensajeEscrito el 29 Ago 2006 03:11 pm

zah escribió:

De hecho hay una funció que sirve para piezas de cualquier forma:

Código :

function checkHit(a:MovieClip, b:MovieClip) {
   with (a) {
      if (b.hitTest(getBounds(_root).xMax, _y, true)) {
         return "left";
      } else if (b.hitTest(getBounds(_root).xMin, _y, true)) {
         return "right";
      } else if (b.hitTest(_x, getBounds(_root).yMax, true)) {
         return "up";
      } else if (b.hitTest(_x, getBounds(_root).yMin, true)) {
         return "down";
      } else {
         return false;
      }
   }
}

No me saleeee :cry:
Por favor: alguién conoce/tiene/puede hacer algún FLA??? Es que lo que necesito es un choque entre piezas de cualquier forma... :( Y no me sale.
Me sirve con un ejemplo... no hace falta un FLA... pero en ese caso, que sea un ejemplo explicado, por favor :crap:

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox
Citar            
MensajeEscrito el 29 Ago 2006 10:35 pm
Elecash tiene razón, mi función es algo inexacta (en los múltiplos impares de 45º) pero creo que merece la pena, teniendo en cuenta que vale para todos los mcs :P .
nestorrente, pon dos círculos llamados c1 y c2 y un campo txt en el escenario:

Código :

c1.startDrag(true)
this.onEnterFrame=function(){
txt.text=checkHit(c1,c2)
}

Si la quieres usar para sólo saber si choca utiliza if(checkHit(a,b)!=false){}

Por Zah

BOFH

4290 de clabLevel

27 tutoriales
5 articulos

  Bastard Operators From Hell Editores

Zaragoza, España

firefox
Citar            
MensajeEscrito el 29 Ago 2006 11:29 pm
Muchas gracias!!!
Me ha salido! Gracias! ^^

Por nestorrente

1010 de clabLevel

10 tutoriales

 

Vigo

firefox

 

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