Форум 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=80697)

World Architect 04.06.2006 18:07

Перевод из локальных в глобальные
 
Здравствуйте! У меня пролема: у меня есть мувик A, внутри которого есть мувик B. Как мне получить координаты мувика B в Stage (в глобальных координатах)? Причем с учетом того что тот мувик A, может быть повернут на любой угол.

iNils 04.06.2006 18:12

http://novemberain.com/livedocs/Help.../00001521.html
Смени кодировку страницы на utf-8

World Architect 04.06.2006 19:23

О, пасиб :) А я сначала подумал что он просто прибавляет к координатам передаваемой точки свои и сумму возвращает.

World Architect 04.06.2006 19:28

Все, понял смысл параметров метода :) Торможу... )

World Architect 05.06.2006 13:19

Продолжаем :)
 
Тааак... Долблюсь дальше... Теперь проблема возникла другая:
(_x, _y) указывает на ноль в системе координат мувика (доп., прямоугольник. Центр координат в любом месте прямоугольника)
Мне надо
1) найти середину правой границы и прочертить линию из этой точки в точку, удаленную на половину ширины прямоугольника в право. Таким образом как ни верти мувик, линия всегда будет перпендикулярна стороне пр-ка и равна половине его ширины (нормальной ширины, а не той что getBounds(_root) выдает)

Проблему решил очень криво:
Туда, откуда должна исходить линия, поставил невидимый кружочек с именем axe. B далее делаю localToGlobal от этого кружка, тем самым получая координаты этой точки. Но вот допустим localToGlobal не от самого кружка. а от точки чуть правее уже не дает нормального результата. Нормально получается если _rotation прямоугльника на нуле. Если же на 180, то полученная прямая не поворачивается, а смотрит в том же направлении, несмотря на то что axe находится внутри прямоугольника (внутри мувика), а прямоугольник повернут.

Код ниже.

src, dst - два мувика, в которых на правой стороне расположены мувики axe (жирная точка). Функция compare рисует линию таким образом: сначала перпендикулярно одному пр-ку, потом до второго (не доходя) и потом перпендикулярно второму.

Код:

        function compare(src, dst) {
                // Вспомогательные переменные
                var srcb = src.getBounds(src);
                var dstb = dst.getBounds(dst);
               
                var srcp  : Object = {x : 0, y : 0};
                var dstp  : Object = {x : 0, y : 0};
                var srcp1 : Object = {x : src._width / 2, y : 0};
                var dstp1 : Object = {x : dst._width / 2, y : 0};
               
                src.axe.localToGlobal(srcp);
                dst.axe.localToGlobal(dstp);
                src.axe.localToGlobal(srcp1);
                dst.axe.localToGlobal(dstp1);

                lineclip.moveTo(srcp.x,  srcp.y);
                lineclip.lineTo(srcp1.x, srcp1.y);
                lineclip.lineTo(dstp1.x, dstp1.y);
                lineclip.lineTo(dstp.x,  dstp.y);
        }

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

iNils 05.06.2006 13:33

Устал читать :) И не понятно.
Может лучше исходник?

World Architect 05.06.2006 13:41

Код:

-----------------
|              |
|              |======
|              |
-----------------

Вот равенствами показано то что надо нарисовать с пом линий. Длина "отростка" равна половине ширины пр-ка. Причем рисовать надо через localToGlobal и globalToLocal, т.к. пр-к м.б. повернут. Прямоугольник - мувик. Линия - отдельно через AS.
А исходник полный к сож не имею права выкладывать... :(

iNils 05.06.2006 13:54

Что то типа этого?
Код:

this.createEmptyMovieClip ("mc", 0);
this.mc.lineStyle (0, 0);
this.mc.moveTo (-100, -100);
this.mc.lineTo (100, -100);
this.mc.lineStyle (0, 0xFF0000);
this.mc.lineTo (100, 100);
this.mc.lineStyle (0, 0);
this.mc.lineTo (-100, 100);
this.mc.lineTo (-100, -100);
this.mc._x = this.mc._y = 200;
this.mc._rotation = 30;
////
function drawLine () {
        var pointA = {};
        pointA.x = 100;
        pointA.y = 0;
        var pointB = {};
        pointB.x = 100 + this.mc._width / 2;
        pointB.y = 0;
        this.mc.localToGlobal (pointA);
        this.mc.localToGlobal (pointB);
        this.lineStyle (0, 0x0000FF);
        this.moveTo (pointA.x, pointA.y);
        this.lineTo (pointB.x, pointB.y);
}
drawLine ();


World Architect 05.06.2006 14:20

Да, правльно, только 0 у mc заранее не известно где находится. Т.е. не обязательно в центре.

iNils 05.06.2006 14:23

Ну сам то ты с этим разберешься?:)


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

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