Здравствуйте! Я попыталась сделать движение объекта за мышкой из этого урока:
http://xitri.com/2008/09/22/simple-e...-top-view.html
Но я не очень дружу с математикой и так до конца не смогла разобраться с кодом.
А точнее: я немного изменила свою задачу, хотела, чтобы при столкновении с препятствием объект останавливался и начинал двигаться к мышке только когда угол между направлением к цели и направлением движения объекта будет хотя бы, например, 60 градусов.
Уже по-всякому пробовала… Не пойму, что влияет на остановку объекта.
А пока: при столкновении с препятствием объект не останавливается, а продолжает двигаться к мышке.
Ниже мой код для наглядности и исходник, если кто заинтересуется.
Очень прошу, помогите разобраться, кто может! Большое спасибо за внимание к моему вопросу!
Очень буду рада комментированию частей кода!

Код AS1/AS2:
step = 2;
onEnterFrame = function(){
var dx = _xmouse - p._x;
var dy = _ymouse - p._y;
//Направление (угол) к цели
var angle = Math.atan2(dy, dx);
var dist = Math.sqrt(dx*dx + dy*dy);
if(dist > step) {
//пробуем пройти напролом
tgtX = p._x + 1/2*step * Math.cos(angle);
tgtY = p._y + 1/2*step * Math.sin(angle);
p.p2.play();
if (zone.hitTest(tgtX, tgtY, true)){
p.p2.gotoAndStop(1);
//напролом не получилось, вычисляем базовое направление
var dAngle = dAngleRadian(direction, angle);
workAngle = angle + dAngle*.10;
//Шаг поворота - 10 градусов
for(var i = 0; i < 15; i += 10) {
for(var j = -1; j <= 1; j += 2) {
if (angle > 60) {
var a = workAngle + radian(i) * j;
var tempX = p._x + step * Math.cos(a);
var tempY = p._y + step * Math.sin(a);
if (!zone.hitTest(tempX, tempY, true)) {
trace(tempX);
//точка выхода найдена. Запоминаем ее и прерываем цикл
tgtX = tempX;
tgtY = tempY;
break;
}
}
}
}
}
var timeDx = tgtX - p._x;
var timeDy = tgtY - p._y;
//направление движения
direction = Math.atan2(timeDy, timeDx);
var dAngle = dAngleDegree(direction*180/Math.PI, p._rotation);
//поворачиваем клип в направлении движения на 5-ю часть
p._rotation += dAngle * .2;
p._x = tgtX;
p._y = tgtY;
} else {
//стоим
p.p2.gotoAndStop(1);
tgtX = p._x;
tgtY = p._y;
}
}
function dAngleRadian(a1, a2) {
var da = a1 - a2;
if (da > Math.PI) {
da = -Math.PI*2 + da;
} else if (da < -Math.PI) {
da = Math.PI*2 + da;
}
return da;
}
function dAngleDegree(a1, a2) {
var da = a1 - a2;
if (da > 180) {
da = -360 + da;
} else if (da < -180) {
da = 360 + da;
}
return da;
}
function degree(a) {
return a / Math.PI * 180;
}
function radian(a) {
return a / 180 * Math.PI;
}