Algunos métodos útiles para manejo de números en Flash Gráficos Fractales y Flash, Mandelbrot ataca CPU
Nov 11

En este ejemplo vamos a tratar de ampliar el primer ejemplo, para lograr una interacción mas compleja. La idea es que las “bolas” no se superpongan unas con otras, ya que ahora hay mas de dos bolas, necesitamos chequear una por una contra la otra. Es un procedimiento bastante demandante de CPU, pero se logran buenos resultados rapidamente.
Como es una continuación del primer ejemplo, recomiendo observar primero el mismo Ejemplo Anterior.
Por otro lado, estamos usando una clase que contiene algunas funciones númericas necesarias que se crearon en otro ejemplo: Clase útil para funciones númericas

Espero les sea útil.

Source CODE: ejemplobolas.zip

This movie requires Flash Player 8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import Math2;
factorReductor = 4;///Factor que determina la fuerza con la cual se acerca un objeto al otro
this.onEnterFrame = function() {
 
	mc1._x = _root._xmouse;///Una de las bolas sigue al mouse, en este caso en el eje X
	mc1._y = _root._ymouse;///Una de las bolas sigue al mouse, en este caso en el eje Y
	for (i=1; i<=7; i++) {
		a = i+1;
		seguir(_root["mc"+a],_root["mc1"],(_root["mc1"]._width/2)+(_root["mc"+a]._width/2)+2);///Llamo a la función que acerca una Movie a la otra, primer parametro: Mc a mover, segundo: Mc de destino, tercero: distancia minima permitida entre los objetos
		for (j=1; j<=7; j++) {
			mantenerDistancia(_root["mc"+i],_root["mc"+j],(_root["mc"+i]._width/2)+(_root["mc"+j]._width/2)+1);///chequeo entre todas las bolas que no se estén superponiendo unas con otras.
		}
	}
};
///Funcion que realiza el acercamiento de una MC hacia otra
function seguir(mc, destino, distanciaMinima) {
	orig = {x:mc._x, y:mc._y};////Determino el punto determinado por la MC a mover
	dest = {x:destino._x, y:destino._y};////Determino el punto que representa la MC de de destino
	miAngulo = Math.atan2((orig.y-dest.y), (orig.x-dest.x));///Calculo el angulo entre dichos dos puntos
	miDistancia = Math2.distanceBetween(orig.x, orig.y, dest.x, dest.y)-distanciaMinima;////Calculo la distancia entre los dos puntos y le resto la distancia minima del tercer parametro
	///Aca se controla si la MC a mover se acercò demasiado a destino, de no ser asi, la acerco utilizando trigonometria (coseno sobre X y seno sobre Y)
	if (miDistancia+distanciaMinima>distanciaMinima) {
		mc._x -= Math2.cos(miAngulo)*(miDistancia/factorReductor);
		mc._y -= Math2.sin(miAngulo)*(miDistancia/factorReductor);
	}
}
function mantenerDistancia(obj1, obj2, dist) {
	orig = {x:obj1._x, y:obj1._y};////Determino el punto determinado por la MC a mover
	dest = {x:obj2._x, y:obj2._y};////Determino el punto que representa la MC de de destino
	miAngulo = Math.atan2((orig.y-dest.y), (orig.x-dest.x));///Calculo el angulo entre dichos dos puntos
	miDistancia = Math2.distanceBetween(orig.x, orig.y, dest.x, dest.y)-dist;////Calculo la distancia entre los dos puntos y le resto la distancia minima del tercer parametro
	if (miDistancia+dist<dist) {/////Si estan superpuestas las movies, las alejo en forma pareja a ambas en el sentido contrario.
		obj1._x -= Math2.cos(miAngulo)*(miDistancia/2);
		obj1._y -= Math2.sin(miAngulo)*(miDistancia/2);
		obj2._x += Math2.cos(miAngulo)*(miDistancia/2);
		obj2._y += Math2.sin(miAngulo)*(miDistancia/2);
	}
}

Leave a Reply

You must be logged in to post a comment.

Todos los derechos reservados www.alejandroquarto.com queda prohibido la utilización de los contenidos en esta web para uso comercial.