Показать сообщение отдельно
Старый 22.04.2008, 19:54
combo вне форума Посмотреть профиль Отправить личное сообщение для combo Найти все сообщения от combo
  № 5  
Ответить с цитированием
combo
 
Аватар для combo

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

Код:
// Находим расстояние между новым положением картинки и дефолтным(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, то картинка начинает себя странно вести.. При уменьшении съезжать в стороны и т.п. Да, и пример віше тоже не всегда себя корректно ведёт. Может есть лучший вариант?


Последний раз редактировалось combo; 22.04.2008 в 19:57.