Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Поворот относительно внутреннего клипа. (http://www.flasher.ru/forum/showthread.php?t=132225)

TeNoR 06.11.2009 20:09

Поворот относительно внутреннего клипа.
 
Вложений: 1
Здравствуйте, возник маленький вопрос.

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


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

Вот пример:

fessor 07.11.2009 00:31

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

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

ну и немного по коду
Код AS1/AS2:

if (active == true)
if (active)

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

TeNoR 07.11.2009 01:14

Цитата:

Сообщение от fessor (Сообщение 863921)
это к тому, что по простому клику мышкой начинает прыгать влево кнопка верчения

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

Цитата:

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

Цитата:

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

fessor 07.11.2009 03:52

*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат, для меня проще работать с двумя невложенными мувиклипами, но иногда приходится использовать 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;
        }
};

глючит (((

TeNoR 07.11.2009 14:59

Цитата:

Сообщение от fessor (Сообщение 863958)
*со второй попытки понял вопрос...
понял и проблему - кнопка и мувиклип находятся в разных системах координат

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

т.е. я добавлял с учетом разницы главного мувика (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, время: 00:09.

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