Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 09.10.2012, 14:22
Orfei вне форума Посмотреть профиль Отправить личное сообщение для Orfei Найти все сообщения от Orfei
  № 1  
Ответить с цитированием
Orfei
 
Аватар для Orfei

Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
По умолчанию Неправильный поворот относительно мыши

Помогите с кодом, пожалуйста!

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

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

Собственно сам код:
Код AS1/AS2:
 //
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(); //стреляем по клику
};


Последний раз редактировалось Orfei; 09.10.2012 в 15:43. Причина: Требование модератора
Старый 09.10.2012, 15:45
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 2  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Orfei,
Типичная проблема. Это связанно с тем, что ваша башня находиться "внутри" танка. У клипа танка, внутри своя координатная система. Когда танк проворачивается, внутри него (где находиться башня) ничего не меняется.

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


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

Старый 09.10.2012, 16:11
Orfei вне форума Посмотреть профиль Отправить личное сообщение для Orfei Найти все сообщения от Orfei
  № 3  
Ответить с цитированием
Orfei
 
Аватар для Orfei

Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
я пока только в стадии освоения. так что надо время на попробовать. )))
вариант с методами globalToLocal; localToGlobal конечно интересней. Только правильно пихнуть его пока не получается. ))

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

Старый 09.10.2012, 16:59
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 4  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Берите координаты мышки из пространства танка, это будет самое простое, если не ошибаюсь.

Код AS1/AS2:
         var mDx = hero_mc._xmouse;
         var mDy = hero_mc._ymouse;
__________________
hauts.ru

Старый 09.10.2012, 20:27
Orfei вне форума Посмотреть профиль Отправить личное сообщение для Orfei Найти все сообщения от Orfei
  № 5  
Ответить с цитированием
Orfei
 
Аватар для Orfei

Регистрация: Aug 2012
Адрес: Санкт-Петербург
Сообщений: 12
Уфф!!!
После 5 часов мозгового штурма я все же добился того что требовалось.

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

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:28.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:28.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.