PDA

Просмотр полной версии : Неправильный поворот относительно мыши


Orfei
09.10.2012, 14:22
Помогите с кодом, пожалуйста!

В общем, ситуация такая:
На главной сцене мувик (танк). Внутри него еще один мувик (башня танка).
Делал так чтобы танк ездил и поворачивался сам +вращение башни вслед за мышкой.
Вроде все сделал танк ездит, башня крутится. Если танк стоит или перемещается в перед назад, то башня ведет себя как надо, смотрит ровно туда куда и курсор мыши, но стоит только начать поворот самого танка как башня начинает вращаться в обратную сторону! Да и просто при повороте танка на угол идет смещение поворота башни относительно курсора!
Помогите решить проблему! Я себе уже весь моСк взорвал!!!

исходники во вложенном файле.28553

Собственно сам код:
//
var step = 2;
var rotDirSpeed = 3;

onEnterFrame = function () {
if (Key.isDown(Key.LEFT)) {
hero_mc._rotation -= rotDirSpeed;
} else if (Key.isDown(Key.RIGHT)) {
hero_mc._rotation += rotDirSpeed;
}

var mDx = _xmouse - hero_mc._x;
var mDy = _ymouse - hero_mc._y;
var mAngle = Math.atan2(mDy, mDx);
hero_mc.body_mc._rotation = -hero_mc._rotation + mAngle / Math.PI * -180; //поворачиваем башню за мышкой

var dirAngle = hero_mc._rotation / 180 * Math.PI;
if (Key.isDown(Key.UP)) {
hero_mc.foot_mc.play();
hero_mc._x -= step * Math.cos(dirAngle);
hero_mc._y -= step * Math.sin(dirAngle);
} else if (Key.isDown(Key.DOWN)) {
hero_mc.foot_mc.play()
hero_mc._x += step * Math.cos(dirAngle);
hero_mc._y += step * Math.sin(dirAngle);
} else {
hero_mc.foot_mc.stop();
}
};
onMouseDown = function () {
hero_mc.body_mc.play(); //стреляем по клику
};

Tails
09.10.2012, 15:45
Orfei,
Типичная проблема. Это связанно с тем, что ваша башня находиться "внутри" танка. У клипа танка, внутри своя координатная система. Когда танк проворачивается, внутри него (где находиться башня) ничего не меняется.

Вообщем, для расчёта угла поворота башни, координаты цели/мышки нужно переводить из глобальных в локальную координатную систему, где находиться башня. Для этого в AS2.0 уже есть готовые методы у муви клипов:
globalToLocal
localToGlobal

Добавлено через 8 минут
Если не осилите, вариант попроще есть. Вытащите башню из танка, чтоб она балы на одном уровне с танком. Затем цепляйте башню к танку:
head._x = tank._x;
head._y = tank._y;
Минус в том, что башня сможет находиться только на центре танка.

Orfei
09.10.2012, 16:11
я пока только в стадии освоения. так что надо время на попробовать. )))
вариант с методами globalToLocal; localToGlobal конечно интересней. Только правильно пихнуть его пока не получается. ))

В принципе я свою ошибку понял. спасибо за подсказку. Буду пробовать исправлять.

Hauts
09.10.2012, 16:59
Берите координаты мышки из пространства танка, это будет самое простое, если не ошибаюсь.

var mDx = hero_mc._xmouse;
var mDy = hero_mc._ymouse;

Orfei
09.10.2012, 20:27
Уфф!!!
После 5 часов мозгового штурма я все же добился того что требовалось.

и так:
Как и сказал уважаемый Tails, проблема оказалась действительно в координатах. Но в неожиданном месте!
В процессе создания мвиков: тельце танчика, башня, выстрел. Я естественно их перемещал, поворачивал, отражал и т.д и т.п. Как оказалось внутри на уровне графики все компоненты перемещаются как хотят. Как то; допустим тяну картинку стрелкой в низ а она ползет вверх, тяну ее в право а она едет влево! Именно на уровне графики я развернул все картинки так чтобы при воспроизведеннии они смотрели в ту сторону куда мне надо. И УРЯ! Усе заработало.!!!
Вот только смущает нюанс: выставив всю графику строго по стрелочкам: жмем в право -едет в право, жмем вверх -едет вверх. Это мне ровным счетом ничего не дало! Все равно была мешанина. Только после того как сверяясь с воспроизведением я выставил правильно.
Итог:
1. Код сохранил таким как он и был изначально.
2. мувики на всех уровнях выставлены строго по стрелочкам.
3. на уровне графики бардак. лево-право, верх-низ перепутаны на проч! (в прочем при воспроизведении это не существенно. Танчик ездит согласно стрелкам, поварачивает в строну мышки, стреляет в сторону клика!)

Отдельное спасибо таварищу Tails за подсказку в каком направлении искать! :-)