Código:
var fuerza_repulsiva = 50;
var distancia_minima = 5;
var coordenada_x_final = this._x;
var coordenanda_y_final = this._y;
this.onEnterFrame = function(){
var distancia_x = this._x - _root._xmouse;
var distancia_y = this._y - _root._ymouse;
var distancia_existente = Math.sqrt(distancia_x * distancia_x + distancia_y * distancia_y);
if(distancia_existente < distancia_minima){
var incremento_x = distancia_x * (distancia_existente + fuerza_repulsiva) / distancia_existente;
var incremento_y = distancia_y * (distancia_existente + fuerza_repulsiva) / distancia_existente;
coordenada_x_final = this._x + incremento_x;
coordenada_y_final = this._y + incremento_y;
}
var incremento_x = (coordenada_x_final - this._x) * .25;
var incremento_y = (coordenada_y_final - this._y) * .25;
this._x = this._x + incremento_x;
this._y = this._y + incremento_y;
};
Cuando me topo con un código así voy analizando línea por línea y cambiando algunos nombres de variables hasta entender que hace en cada momento, pero una parte de este me ha podido.
Citar
Explicación y duda
1. Primero calculamos la distancia entre el mouse y el objeto en el eje X, posteriormente hacemos lo mismo en el eje Y.
2. A continuación calculamos la distancia real entre los dos puntos mediante el teorema de Pitágoras usando los dos datos anteriores.
3. Abrimos el condicional. Si la distancia entre el mouse y el objeto es menor a lo establecido:
Fijamos la cantidad de píxels que se debe alejar nuestro objeto con operaciones que no logro comprender.
Fijamos la posición final del objeto tras el desplazamiento. No comprendo la finalidad, ya hacemos esto al final del código.
4. Volvemos a fijar el incremento para alejar nuestro objeto. ¿Por qué? Si se ejecutara el condicional tendríamos repetida la declaración de las variables "incremento_x" e "incremento_y".
5. Finalmente le sumamos a la posición inicial la distancia que se debe alejar el objeto para los dos ejes de coordenadas.
No logro comprender practicamente todas las líneas que se ejecutan dentro y después del "if" ¿Alguien me las puede explicar? Por si las moscas cuelgo el código tal cual lo saqué de internet (AVISO: De la manera siguiente no ejecuta lo deseado):
Código:
//---Valor que debe alejarse y valor al que permite acercarse
var alejarse:Number = 50;
var cerca:Number = 50;
var newX:Number = this.bola._x;
var newY:Number = this.bola._y;
//---Funcion de movimiento
this.bola.onEnterFrame = function():Void {
var difX:Number = this._x - _root._xmouse;
var difY:Number = this._y - _root._ymouse;
var hipot:Number = Math.sqrt(difX * difX + difY * difY);
if(hipot < cerca){
var incX:Number = difX * (hipot + alejarse) / hipot;
var incY:Number = difY * (hipot + alejarse) / hipot;
newX = this._x + incX;
newY = this._y + incY;
}
var X:Number = (newX - this._x) * .25;
var Y:Number = (newY - this._y) * .25;
this._x += X;
this._y += Y;
};
Espero que me podáis ayudar, llevo toda la mañana dandole al coco con esta historia. Gracias de antemano por la ayuda, cualquier mínima pista será bien recibida.