Просмотр полной версии : Перевод из локальных в глобальные
World Architect
04.06.2006, 18:07
Здравствуйте! У меня пролема: у меня есть мувик A, внутри которого есть мувик B. Как мне получить координаты мувика B в Stage (в глобальных координатах)? Причем с учетом того что тот мувик A, может быть повернут на любой угол.
http://novemberain.com/livedocs/Help/ActionScriptLangRef/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);
}
Что не так?
Я бы поставил второй кружочек, но при этом изменится ширина мувика, а это оч не желательно
Устал читать :) И не понятно.
Может лучше исходник?
World Architect
05.06.2006, 13:41
-----------------
| |
| |======
| |
-----------------
Вот равенствами показано то что надо нарисовать с пом линий. Длина "отростка" равна половине ширины пр-ка. Причем рисовать надо через localToGlobal и globalToLocal, т.к. пр-к м.б. повернут. Прямоугольник - мувик. Линия - отдельно через AS.
А исходник полный к сож не имею права выкладывать... :(
Что то типа этого?
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 заранее не известно где находится. Т.е. не обязательно в центре.
Ну сам то ты с этим разберешься?:)
World Architect
05.06.2006, 14:27
Ну блин, вот как это я и не понимаю :) ноль он же и есть ноль :) как понять внутри мувика, где он находится? :) т.е. мне надо взять getBounds относительно самого мувика, чтоб понять, где граница находится?
this.createEmptyMovieClip ("mc", 0);
this.mc.lineStyle (0, 0);
this.mc.moveTo (-50, -50);
this.mc.lineTo (150, -50);
this.mc.lineStyle (0, 0xFF0000);
this.mc.lineTo (150, 150);
this.mc.lineStyle (0, 0);
this.mc.lineTo (-50, 150);
this.mc.lineTo (-50, -50);
this.mc._x = this.mc._y = 200;
this.mc._rotation = 30;
////
function drawLine () {
var b = this.mc.getBounds (this.mc);
var pointA = {};
pointA.x = (b.xMin + b.xMax) / 2 + (b.xMax - b.xMin) / 2;
pointA.y = (b.yMin + b.yMax) / 2;
var pointB = {};
pointB.x = pointA.x + (b.xMax - b.xMin) / 2;
pointB.y = (b.yMin + b.yMax) / 2;
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:49
Оказывается я перепутал xMax и yMax в одном месте... Вот чем плох copy - paste... :(
Извиняюсь за тупые вопросы :)
World Architect
05.06.2006, 15:22
спасибо за помощь :)
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.