![]() |
|
||||||||||
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
Здравствуйте! У меня пролема: у меня есть мувик A, внутри которого есть мувик B. Как мне получить координаты мувика B в Stage (в глобальных координатах)? Причем с учетом того что тот мувик A, может быть повернут на любой угол.
|
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
http://novemberain.com/livedocs/Help.../00001521.html
Смени кодировку страницы на utf-8 Последний раз редактировалось iNils; 04.06.2006 в 18:14. |
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
О, пасиб
А я сначала подумал что он просто прибавляет к координатам передаваемой точки свои и сумму возвращает. |
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
Все, понял смысл параметров метода
Торможу... ) |
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
Тааак... Долблюсь дальше... Теперь проблема возникла другая:
(_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);
}
Я бы поставил второй кружочек, но при этом изменится ширина мувика, а это оч не желательно |
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
Вот равенствами показано то что надо нарисовать с пом линий. Длина "отростка" равна половине ширины пр-ка. Причем рисовать надо через localToGlobal и globalToLocal, т.к. пр-к м.б. повернут. Прямоугольник - мувик. Линия - отдельно через AS.
А исходник полный к сож не имею права выкладывать... ![]() |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Что то типа этого?
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 ();
|
|
|||||
|
Регистрация: May 2006
Сообщений: 57
|
Да, правльно, только 0 у mc заранее не известно где находится. Т.е. не обязательно в центре.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 16:26. |
|
|
« Предыдущая тема | Следующая тема » |
|
|