Comunidad de diseño web y desarrollo en internet online

Colision en ActionScript 2.0 (ayuda :S)

Citar            
MensajeEscrito el 25 Jul 2009 03:52 am
Hola! Bueno, tengo 14 años y hasta ahora me las arregle para poder hacer cosas simples como:

[flash width=500 height=500]http://img28.xooimage.com/files/3/f/5/fercabsimon-1067b99.swf[/flash]
No estoy seguro de que se vea bien, sino veanlo en fermincabsimon.tk

Estaria bueno si alguien me pudiara pasar un archivo fla en el que, por ejemplo, al colisionar dos circulos (movie clips), en un cuadro de texto diga "colisionando" y al separarlos diga "no colisionando", siendo uno de los dos el cursor (eso ya se como), o algo por el estilo, sino algun tutorial para novatoides como yo :)
de antemano gracias y saludos a todos!!

Por fermincab

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 25 Jul 2009 05:38 am
Flash tiene un problema con las orillas de los circulos en cuando a detectar colisiones y por eso hay varios "tweaks" que solucionan el inconveniente

por ejemplo este

Código ActionScript :

follow_mc.startDrag(true);
cont=0;
radius = circulo_mc._height/2;
_root.onMouseMove = function () {
   for (i=1; i<360; i++) {
      spot_x = circulo_mc._x+radius*Math.sin(i);
      spot_y = circulo_mc._y+radius*Math.cos(i);
      if (follow_mc.hitTest(spot_x, spot_y, true)) {
         cont++;
         trace("hola" + cont); 
         }
      }
}


ese revisa 360 veces por movimiento de mouse, si hay colision
no es para anda optimo u.u pero funciona en circulos

para figuras rectangulares la cosa seria algo asi

Código ActionScript :

follow_mc.startDrag(true);
cont=0;
_root.onMouseMove = function () {
   if (follow_mc.hitTest(cuadrado_mc)) {
      cont++;
      trace("hola" + cont); 
   }
}


;) suerte

Por tribak

Claber

2448 de clabLevel

6 tutoriales

Genero:Masculino   Héroes

Fotógrafo o algo

firefox
Citar            
MensajeEscrito el 25 Jul 2009 01:53 pm
Hola,
una buena y rápida solución para detectar la colisión entre dos círculos es la siguiente (aunque tienes que tener en cuenta que sólo sirve para el caso de 2 círculos, no de 1 círculo y otra figura):
como la distancia entre el centro del círculo y cualquiera de sus puntos exteriores es siempre la misma, entonces los dos círculos estarán en contacto siempre que la distancia entre sus centros sea menor que la suma de sus radios.
Ejemplo:

Código ActionScript :

import flash.geom.Point;

c1.onPress = c1.startDrag;
c1.onRelease = c1.stopDrag;

var r1:Number = c1._width / 2; //radios de los círculos
var r2:Number = c2._width / 2;
var p1:Point = new Point(); //centros de los círculos
var p2:Point = new Point();

this.onEnterFrame = function():Void
{
   p1.x = c1._x + r1; //le sumo los radios porque los círculos están en las coordenadas 0, 0
   p1.y = c1._y + r1;
   p2.x = c2._x + r2;
   p2.y = c2._y + r2;
   var distance:Number = Point.distance(p1, p2);
   if (distance < (r1 + r2))
   {
      trace("los dos círculos colisionan");
   }
}

Por isidoro

Claber

498 de clabLevel

2 tutoriales

Genero:Masculino  

firefox
Citar            
MensajeEscrito el 26 Jul 2009 12:08 am
son grossos, sepanlo! :wink: Muchas gracias! ahora voy a ver como me las arreglo para que el mensaje "los circulos estan colisionando" aparezca en un cuadro de texto dinamico.
Gracias y saludos!

Por fermincab

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 26 Jul 2009 12:17 am
ya lo logre! fue mas facil de lo que creía que era, hice lo siguiente:

Código :

import flash.geom.Point; 
 
c1.onPress = c1.startDrag; 
c1.onRelease = c1.stopDrag; 
 
var r1:Number = c1._width / 2; //radios de los círculos 
var r2:Number = c2._width / 2; 
[del]var p1:Point = new Point(); //centros de los círculos 
var p2:Point = new Point(); 
 
this.onEnterFrame = function():Void 
{ 
   p1.x = c1._x + r1; //le sumo los radios porque los círculos están en las coordenadas 0, 0 
   p1.y = c1._y + r1; 
   p2.x = c2._x + r2; 
   p2.y = c2._y + r2; 
   var distance:Number = Point.distance(p1, p2); 
[b]   if (distance < (r1 + r2)) 
   { 
      texto.text = "los dos círculos colisionan" 
   } 
   if (distance > (r1 + r2)) 
   { 
      texto.text = "los dos círculos no colisionan" 
   }
}[/b]


Gracias

Por fermincab

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 27 Jul 2009 12:31 pm
Bien, pero por aquello de ahorrar cálculos innecesarios al procesador, yo cambiaría el segundo if por else:

Código ActionScript :

if (distance < (r1 + r2))
{
   texto.text = "los dos círculos colisionan";
}
else
{
   texto.text = "los dos círculos no colisionan";
}

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.