Доброго времени суток.Есть код в AS2.0 (совсем не знаком) пытаюсь переделать в AS 3.0.На сцене 2 мувика trailer и car.В них 2 мувика сцепки в car dotOut в trailer dotIn.Ну и смысл мы ими управляем.Никак не могу понять функцию correctTrailer(slave, master) если трейсить trace(slave); выводится _level0.trailer,если же trace(master);то _level0.car, что мне не известно и тут тупик,что за левел и от куда берется.
Далее пишу код в AS 2.0 взятый из сети,пропуская функцию клавиатуры управление кнопками.

Код AS1/AS2:
speed = 0;
speedLimit = 8;
speedStep = .5;
rotLimit = 35;
rotStep = 3;
trailerRotLimit = 55 / 180 * Math.PI;
function move(){
if(Math.abs(speed) > 0) {
car._rotation += car.left._rotation * speed / car.left._x;
}
angle = car._rotation * Math.PI / 180;
speedX = speed * Math.cos(angle);
speedY = speed * Math.sin(angle);
car._x += speedX;
car._y += speedY;
}
function correctTrailer(slave, master){
if(speed){
//Пересчитываем точку в родительскую систему координат
var masterDot = {x:master.dotOut._x, y:master.dotOut._y};
master.localToGlobal(masterDot);
globalToLocal(masterDot);
var dx = masterDot.x - slave._x;
var dy = masterDot.y - slave._y;
//Угол между прицепом и машиной
var aRad = Math.atan2(dy, dx);
//Угол поворота самой машины
var masterRotRad = master._rotation / 180 * Math.PI;
//Разница между ними
var dAngle = masterRotRad - aRad;
//Коррекция перехода 180/-180 градусов
if (dAngle > Math.PI) {
dAngle = -Math.PI*2 + dAngle;
} else if (dAngle < -Math.PI) {
dAngle = Math.PI*2 + dAngle;
}
if(speed < 0) {
//Выполняется только при движении назад
//Ограничение на поворот и торможение из-за прицепа
if(dAngle >= trailerRotLimit) {
aRad = masterRotRad - trailerRotLimit;
speed *= .8;
} else if(dAngle <= -trailerRotLimit) {
aRad = masterRotRad + trailerRotLimit;
speed *= .8;
}
//Обратная связь на машину в результате торможения
//Коэффициенты .5 и 3 подбираются вручную
if(dAngle >= trailerRotLimit * .5) {
master._rotation += speed / speedLimit * 3;
} else if(dAngle <= -trailerRotLimit * .5) {
master._rotation -= speed / speedLimit * 3;
}
}
//Убираем паразитную скорость (погрешность округления чисел)
if(Math.abs(speed) < speedStep && !Key.isDown(Key.DOWN)) {
speed = 0;
}
//Поворачиваем прицеп к машине
var a = aRad / Math.PI * 180;
slave._rotation = a;
//Пододвигаем прицеп чтобы была стыковка
slave._x = masterDot.x - Math.cos(aRad) * slave.dotIn._x;
slave._y = masterDot.y - Math.sin(aRad) * slave.dotIn._x;
}
}
onEnterFrame = function() {
move();
correctTrailer(trailer, car);
}
Далее пишу код в AS 3.0 который состряпал я,пропуская функцию клавиатуры управление кнопками.

Код AS3:
var angle:Number=0;
var speedX:Number=0;
var speedY:Number=0;
var speedLimit:Number = 8;
var speedStep:Number = .5;
var rotLimit:Number = 35;
var rotStep:Number = 3;
var trailerRotLimit:Number = 55 / 180 * Math.PI;
var speed:Number=0;
var pressUp:Boolean = false;
var pressDown:Boolean = false;
var pressLeft:Boolean = false;
var pressRight:Boolean = false;
function startl1():void{
car.addEventListener(Event.ENTER_FRAME, ModifyCar);
stage.addEventListener(Event.ENTER_FRAME,corektirovka);
}
function corektirovka(eFrame:Event)
{
correctTrailer (trailer, car);
}
function ModifyCar(eFrame:Event)
{
if (pressLeft)
{
if (car.lefts.rotation > - rotLimit) {
car.lefts.rotation = car.rights.rotation -= rotStep;
}
}
else if (pressRight) {
if (car.lefts.rotation < rotLimit) {
car.lefts.rotation = car.rights.rotation += rotStep;
}
}
if (pressUp) {
speed += (speed < speedLimit)? speedStep : 0;
} else if (pressDown) {
speed += (speed > -speedLimit)? -speedStep : 0;
} else {
speed += (speed < 0)? speedStep : (speed > 0)? -speedStep : 0;
}
if(Math.abs(speed) > 0) {
car.rotation += car.lefts.rotation * speed / car.lefts.x;
}
angle = car.rotation * Math.PI / 180;
speedX = speed * Math.cos(angle);
speedY = speed * Math.sin(angle);
car.x += speedX;
car.y += speedY;
}
function correctTrailer(slave, master){
if(speed){
var masterDot={x:master.dotOut.x, y:master.dotOut.y};
master.localToGlobal(masterDot);
globalToLocal(masterDot);
var dx = masterDot.x - slave.x;
var dy = masterDot.y - slave.y;
//Угол между прицепом и машиной
var aRad = Math.atan2(dy, dx);
//Угол поворота самой машины
var masterRotRad = master.rotation / 180 * Math.PI;
//Разница между ними
var dAngle = masterRotRad - aRad;
//Коррекция перехода 180/-180 градусов
if (dAngle > Math.PI) {
dAngle = -Math.PI*2 + dAngle;
} else if (dAngle < -Math.PI) {
dAngle = Math.PI*2 + dAngle;
}
if(speed < 0) {
//Выполняется только при движении назад
//Ограничение на поворот и торможение из-за прицепа
if(dAngle >= trailerRotLimit) {
aRad = masterRotRad - trailerRotLimit;
speed *= .8;
} else if(dAngle <= -trailerRotLimit) {
aRad = masterRotRad + trailerRotLimit;
speed *= .8;
}
//Обратная связь на машину в результате торможения
//Коэффициенты .5 и 3 подбираются вручную
if(dAngle >= trailerRotLimit * .5) {
master.rotation += speed / speedLimit * 3;
} else if(dAngle <= -trailerRotLimit * .5) {
master.rotation -= speed / speedLimit * 3;
}
}
//Убираем паразитную скорость (погрешность округления чисел)
if(Math.abs(speed) < speedStep && !pressDown) {
speed = 0;
}
//Поворачиваем прицеп к машине
var a = aRad / Math.PI * 180;
slave.rotation = a;
//Пододвигаем прицеп чтобы была стыковка
slave.x = masterDot.x - Math.cos(aRad) * slave.dotIn.x;
slave.y = masterDot.y - Math.sin(aRad) * slave.dotIn.x;
}
}
startl1();
Помогите плиз разобраться с функцией correctTrailer(slave, master),может даже кто подправить может.Если трейсю trace(slave);либо master в моем случае то получается и другой [object MovieClip].Ну и конечно же как только начинаю движение получаю результат:
TypeError: Error #1010: A term is undefined and has no properties.
at bigtruck/correctTrailer()
at bigtruck/corektirovka()
Все мозги уже себе запарил,собственными силами разобраться не получается.Большое спасибо.С уважением Андрей.