Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   преобразования в localToGlobal (http://www.flasher.ru/forum/showthread.php?t=205323)

Wadimir 29.11.2013 02:10

преобразования в localToGlobal
 
Приветсвую!

Кто-то знает какие преобразования происходят в методе localToGlobal? Как там всё обрабатывается? Какой там код?

alexandrratush 29.11.2013 03:11

Вот такой код:
http://www.flasher.ru/forum/showthread.php?t=140493
http://www.emanueleferonato.com/2010...global-method/
http://help.adobe.com/ru_RU/FlashPla...localToGlobal()
http://help.adobe.com/ru_RU/as3/dev/...8a9b90204-7dc5

Wolsh 29.11.2013 03:14

Преобразования? О__о К счастью, никаких. Только вычисления. К координате х указанной точки прибавляются координаты х вызывающего объекта и всех его парентов, так же с координатой у.
Как бы так:
Код AS3:

                        var s1:Sprite = new Sprite();
                        super.addChild(s1);
                        var s2:Sprite = new Sprite();
                        s1.addChild(s2);
                        s1.x = 100;
                        s1.y = 150;
                        s2.x = 10;
                        s2.y = 20;
                        var p1:Point = new Point(50, 50);
                        var p2:Point;
                        var s:DisplayObject = s2;
                        var sx:Number = 0;
                        var sy:Number = 0;
                        while (s.parent)
                        {
                                sx += s.x;
                                sy += s.y;
                                s = s.parent;
                        }
                        p2 = new Point(p1.x + sx, p1.y + sy);

Только намного шустрее чем вручную))

Isfet 29.11.2013 06:49

а разве в localToGlobal не учитываются rotation всех объектов?

caseyryan 29.11.2013 08:43

Цитата:

Сообщение от Isfet (Сообщение 1153814)
а разве в localToGlobal не учитываются rotation всех объектов?

А зачем? Точка начала координат то все равно никуда не денется. Относительно нее и считается положение

Wolsh 29.11.2013 09:35

В смысле "никуда не денется"? Это у того, который повернули, никуда не денется. А у всех кто внутри еще как денется.

Korchy 29.11.2013 09:39

Есть сцена, в ней контейнер, в нем спрайт. Спрайт сдвинули, а контейнер повернули. Простым суммированием тоже правильный перевод получится ?

В общем случае - для того, чтобы перевести из локальных координат в глобальные нужно умножить на инвертированную матрицу мира.

Isfet 29.11.2013 11:17

тут еще проблема в пересчете координат в глобальные из-за разных углов поворота осей систем координат всех вложенных объектов, в общем случае, если угол между осями двух систем координат равен нулю, тогла можно и суммированием обойтись.
юзаю иногда такую формулу,

a - угол между системами
x0,y0 - сдвиг центра систем

x1 =(x cos a + y sin a) + x0;
x2 = (-x sin a + y cos a) +y0;

Wadimir 29.11.2013 12:20

а ещё когда на мувиклип применить скейл, то localToGlobal как то не точно преобразует координаты

Isfet 29.11.2013 12:25

x и y нужно умножать на scaleX и scaleY - соответственно

Nucer 01.12.2013 11:50

Я тоже замечал глюк с localToGlobal когда произведены сложные преобразования с мувиклипом. Не помню точно в чём там дело было, видимо был большой уровень вложенности и к объектам применён scale и rotation. Выдавало какую то ахинею, пришлось вручную велосипед прописывать!)

ChuwY 02.12.2013 14:39

Также для вашей задачи можно попробовать применить concatenatedMatrix.


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

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