PDA

Просмотр полной версии : преобразования в localToGlobal


Wadimir
29.11.2013, 02:10
Приветсвую!

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

alexandrratush
29.11.2013, 03:11
Вот такой код:
http://www.flasher.ru/forum/showthread.php?t=140493
http://www.emanueleferonato.com/2010/06/22/understanding-as3-localtoglobal-method/
http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/display/DisplayObject.html#localToGlobal()
http://help.adobe.com/ru_RU/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7dca.html#WS5b3ccc516d4fbf351e63e3d118a9b90204-7dc5

Wolsh
29.11.2013, 03:14
Преобразования? О__о К счастью, никаких. Только вычисления. К координате х указанной точки прибавляются координаты х вызывающего объекта и всех его парентов, так же с координатой у.
Как бы так: 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
а разве в 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 (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/geom/Transform.html#concatenatedMatrix).