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

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

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

Регистрация: Jan 2008
Сообщений: 18
По умолчанию Поворот относительно внутреннего клипа.

Здравствуйте, возник маленький вопрос.

У нас есть клип (mc), который нужно вращать за курсором мыши. Начальный угол поворота зависит от положения внутреннего клипа (butt). Теперь вопрос: как правильно определить поворот, если внутренний клип (butt) будет смещаться?

Вот начальное определение угла поворота клипа (mc):

Код AS1/AS2:
var active:Boolean = false;
mc.butt.onPress = function() {
	active = true;
};
mc.butt.onRelease = mc.butt.onReleaseOutside=function () {
	active = false;
};
this.onMouseMove = function() {
	if (active == true) {
		/// ОПРЕДЕЛЯЕМ ПОВОРТ ОТНОСИТЕЛЬНО МЫШИ И МЕНЯЕМ УГОЛ ПОВОРОТА СООТВЕТСТВЕННО ТОЧКИ (мувика, который находится внутри).
		mc._rotation = Math.atan2(_ymouse-mc._y, _xmouse-mc._x)*180/Math.PI+Math.atan2(mc._y-mc.butt._y, mc._x-mc.butt._x)*180/Math.PI;
	}
};
Все работает как надо, но когда внутренний клип (butt) начинает смещаться поворот сбивается.


Подскажите пожалуйста, как правильно сделать.

Вот пример:
Вложения
Тип файла: rar test_rotation.rar (532 байт, 43 просмотров)

Старый 07.11.2009, 00:31
fessor вне форума Посмотреть профиль Отправить личное сообщение для fessor Найти все сообщения от fessor
  № 2  
Ответить с цитированием
fessor

Регистрация: Oct 2009
Сообщений: 101
убежало одеяло, улетела простыня
и подушки как лягушки ускакали от меня

это к тому, что по простому клику мышкой начинает прыгать влево кнопка верчения
накладка в том, что кнопка должна перетаскиваться мышкой и одновременно вложена во вращающийся мувик, вытащи ее и измени ссылки на нее в коде

ну и немного по коду
Код AS1/AS2:
if (active == true)
if (active)
это абсолютно одинаковый с точки зрения компилятора код, так зачем писать больше?

Старый 07.11.2009, 01:14
TeNoR вне форума Посмотреть профиль Отправить личное сообщение для TeNoR Найти все сообщения от TeNoR
  № 3  
Ответить с цитированием
TeNoR

Регистрация: Jan 2008
Сообщений: 18
Цитата:
Сообщение от fessor Посмотреть сообщение
это к тому, что по простому клику мышкой начинает прыгать влево кнопка верчения
Это и есть пример смещения, который я сделал по отжатию мыши (и прыгает она в право).

Цитата:
накладка в том, что кнопка должна перетаскиваться мышкой и одновременно вложена во вращающийся мувик, вытащи ее и измени ссылки на нее в коде
И что будет? - обычное слежение за мышью без зависимости внутренней кнопки. Меня же интересует математическая модель слежения поворота (формула).

Цитата:
... зачем писать больше?
Мне так удобнее.

Старый 07.11.2009, 03:52
fessor вне форума Посмотреть профиль Отправить личное сообщение для fessor Найти все сообщения от fessor
  № 4  
Ответить с цитированием
fessor

Регистрация: Oct 2009
Сообщений: 101
*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат, для меня проще работать с двумя невложенными мувиклипами, но иногда приходится использовать mc.localToGlobal(); mc.globalToLocal();
тут написано поподробнее:
http://www.flasher.ru/forum/showthre...=localToGlobal

Добавлено через 39 минут
попытался использовать такой код:
Код AS1/AS2:
var muu:Object = { x:0, y:0 };
var buu:Object = { x:0, y:0 };
mc.localToGlobal(buu);
 
 
 
var active:Boolean = false;
mc.butt.onPress = function() {
	mc.butt.localToGlobal(muu);
	trace(muu.x+"???????"+muu.y)
	active = true;
};
mc.butt.onRelease = mc.butt.onReleaseOutside=function () {
	active = false;
};
this.onMouseMove = function() {
	if (active == true) {
		//mc.butt.localToGlobal(muu);
		/// ОПРЕДЕЛЯЕМ ПОВОРТ ОТНОСИТЕЛЬНО МЫШИ И МЕНЯЕМ УГОЛ ПОВОРОТА СООТВЕТСТВЕННО ТОЧКИ (мувика, который находится внутри).
		mc._rotation = Math.atan2(_ymouse-muu.y, _xmouse-muu.x)*180/Math.PI+Math.atan2(muu.y-buu.y, muu.x-buu.x)*180/Math.PI;
	}
};
глючит (((

Старый 07.11.2009, 14:59
TeNoR вне форума Посмотреть профиль Отправить личное сообщение для TeNoR Найти все сообщения от TeNoR
  № 5  
Ответить с цитированием
TeNoR

Регистрация: Jan 2008
Сообщений: 18
Цитата:
Сообщение от fessor Посмотреть сообщение
*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат
Спасибо, пересмотрев формулу определения угла - все получилось =)

т.е. я добавлял с учетом разницы главного мувика (mc) и вложенного (butt), когда было достаточно узнать разницу координат вложенного мувика от нулей. Проще выражаясь:

Код AS1/AS2:
mc._rotation = Math.atan2(_ymouse-mc._y, _xmouse-mc._x)*180/Math.PI-Math.atan2(mc.butt._y, mc.butt._x)*180/Math.PI
//
и все работает, учитывая смещение.

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

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

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


 


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


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