![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 49
|
Доброго времени суток.Есть код в 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 взятый из сети,пропуская функцию клавиатуры управление кнопками. 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); } 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(); TypeError: Error #1010: A term is undefined and has no properties. at bigtruck/correctTrailer() at bigtruck/corektirovka() Все мозги уже себе запарил,собственными силами разобраться не получается.Большое спасибо.С уважением Андрей. |
|
|||||
|
Цитата:
Цитата:
Глубже вникать не стал. С таким форматированием ас3 кода глаза сломать стремно. Трейсы твои адекватные выдает, у тя трейлер и машина мувиклипы и есть насколько я понимаю. А то что какой-то там терм андефайнед, так было бы неплохо знать какой именно терм, а то по этому куску кода сложно сказать что там у тя андефайнед.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 49
|
TypeError: Error #1034: Type Coercion failed: cannot convert Object@11117331 to flash.geom.Point.
at truckas3_fla::MainTimeline/correctTrailer() at truckas3_fla::MainTimeline/corektirovka() строка : master.localToGlobal(masterDot); Я вложил 2 файла .fla Один в AS2 второй в AS3 может так проще понять будет. |
|
|||||
|
Прочел бы ответ мой сначала внимательно
![]() Цитата:
![]() Добавлено через 6 минут поменяй вот это: на вот это: Будет без той ошибки о которой ты спрашиваешь. А глюки с координатами кузова сам исправляй, а то машина ездит а кузов отрывается и улетает куда-то... Добавлено через 13 минут Блин, всё-таки не сдержался))) Менй вот этот блок целиком: var masterDot={x:master.dotOut.x, y:master.dotOut.y}; master.localToGlobal(masterDot); globalToLocal(masterDot); И было бы неплохо хоть литературку подчитать о тех методах которые используешь. localToGlobal/globalToLocal в ас3 работают немного не так как в ас2.
__________________
Кто к нам с чем для чего - тот у нас того от того. |
|
|||||
|
Регистрация: Sep 2010
Сообщений: 49
|
Привет.Спасибо за ответ.НАсчет кузова,этя бы потом ковырял.А насчет поинта, я твой ответ видел,но вот просто напроста пока не проходил
Да читаю я читаю потихоньку.Только вот больше методом тыка вечно почемуто,да терпения маловато...Спасибо еще раз.Добавил тебе хороший отзыв ![]() |
![]() |
![]() |
Часовой пояс GMT +4, время: 00:31. |
|
|
« Предыдущая тема | Следующая тема » |
|
|