PDA

Просмотр полной версии : Поворот относительно внутреннего клипа.


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

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

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

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) начинает смещаться поворот сбивается.


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

Вот пример:

fessor
07.11.2009, 00:31
убежало одеяло, улетела простыня
и подушки как лягушки ускакали от меня

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

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

TeNoR
07.11.2009, 01:14
это к тому, что по простому клику мышкой начинает прыгать влево кнопка верчения


Это и есть пример смещения, который я сделал по отжатию мыши (и прыгает она в право).

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

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


... зачем писать больше?

Мне так удобнее.

fessor
07.11.2009, 03:52
*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат, для меня проще работать с двумя невложенными мувиклипами, но иногда приходится использовать mc.localToGlobal(); mc.globalToLocal();
тут написано поподробнее:
http://www.flasher.ru/forum/showthread.php?t=128107&highlight=localToGlobal

Добавлено через 39 минут
попытался использовать такой код:
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;
}
};
глючит (((

TeNoR
07.11.2009, 14:59
*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат

Спасибо, пересмотрев формулу определения угла - все получилось =)

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


mc._rotation = Math.atan2(_ymouse-mc._y, _xmouse-mc._x)*180/Math.PI-Math.atan2(mc.butt._y, mc.butt._x)*180/Math.PI
//


и все работает, учитывая смещение.