Так я и не говорю, что знаю правильную формулу.. Есть догадки, во всяком случае, что-то приближенное к истине. Вот примерный кусок кода:

Код:
// Находим расстояние между новым положением картинки и дефолтным(28, 80 пох и по у, для полного, вмещаемого в окно размера)
var diff_x = _root.picMovie._x - 28;
var diff_y = _root.picMovie._y - 80;
// направление движение: если новое положение мувика левее/выше, то перемещать нужно вправо/ниже
var wayX = (diff_x < 28)? 1: -1;
var wayY = (diff_y < 80)? 1: -1;
// меняем знак - расстояние должно быть только положительным
diff_x *= (diff_x < 0)? -1: 1;
diff_y *= (diff_y < 0)? -1: 1;
var ratio_x = diff_x / diff_y; // узнаём как относится разница x к разнице y
var ratio_y = diff_y / diff_x; // по сути - узнаём шаг относительно другого
if (ratio_x > ratio_y) {
var step_x = ratio_x;
var step_y = 1;
} else
if (ratio_y > ratio_x) {
var step_x = 1;
var step_y = ratio_y;
}
// ну и двигаем
_root.picMovie._x += step_x*wayX;
_root.picMovie._y += step_y*wayY;
Код кривой, но думаю понятный. Смысл сводится к тому, чтобы большее расстояние разделить на меньшее расстояние и получить таким образом больший шаг, приняв меньший за единицу. Например, если новая позиция мувика гораздо дальше съехала по x, чем по y, то и скорость движения по x должна быть больше, дабы мув точно встал на своё место.
Беда одна - если в эту конструкцию включить изменения _x|_yscale, то картинка начинает себя странно вести.. При уменьшении съезжать в стороны и т.п. Да, и пример віше тоже не всегда себя корректно ведёт. Может есть лучший вариант?
