Просмотр полной версии : преобразования в localToGlobal
Приветсвую!
Кто-то знает какие преобразования происходят в методе 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
Преобразования? О__о К счастью, никаких. Только вычисления. К координате х указанной точки прибавляются координаты х вызывающего объекта и всех его парентов, так же с координатой у.
Как бы так: 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);Только намного шустрее чем вручную))
а разве в localToGlobal не учитываются rotation всех объектов?
caseyryan
29.11.2013, 08:43
а разве в localToGlobal не учитываются rotation всех объектов?
А зачем? Точка начала координат то все равно никуда не денется. Относительно нее и считается положение
В смысле "никуда не денется"? Это у того, который повернули, никуда не денется. А у всех кто внутри еще как денется.
Есть сцена, в ней контейнер, в нем спрайт. Спрайт сдвинули, а контейнер повернули. Простым суммированием тоже правильный перевод получится ?
В общем случае - для того, чтобы перевести из локальных координат в глобальные нужно умножить на инвертированную матрицу мира.
тут еще проблема в пересчете координат в глобальные из-за разных углов поворота осей систем координат всех вложенных объектов, в общем случае, если угол между осями двух систем координат равен нулю, тогла можно и суммированием обойтись.
юзаю иногда такую формулу,
a - угол между системами
x0,y0 - сдвиг центра систем
x1 =(x cos a + y sin a) + x0;
x2 = (-x sin a + y cos a) +y0;
а ещё когда на мувиклип применить скейл, то localToGlobal как то не точно преобразует координаты
x и y нужно умножать на scaleX и scaleY - соответственно
Я тоже замечал глюк с localToGlobal когда произведены сложные преобразования с мувиклипом. Не помню точно в чём там дело было, видимо был большой уровень вложенности и к объектам применён scale и rotation. Выдавало какую то ахинею, пришлось вручную велосипед прописывать!)
Также для вашей задачи можно попробовать применить concatenatedMatrix (http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/geom/Transform.html#concatenatedMatrix).
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.