PDA

Просмотр полной версии : Описать прямоугольник вокруг мувиклипа


Idalgo
13.01.2008, 14:26
Нужно описать прямоугольник вокруг мувиклипа (любого, в т.ч. битмапа с прозрачным фоном).
getBounds дает нужный набор координат - габариты мувиклипа.
Но если мувиклип повернуть, то getBounds дает габариты повернутого прямоугольника, содержащего мувиклип, что не подходит.
Нужно, чтобы прямоугольник описывал только видимый объект.
Подскажите правильный путь, плиз.

MrPoma
13.01.2008, 16:10
самое простое поместить мувик и прямоугольник в контейнер и вращать контейнер

Idalgo
13.01.2008, 17:11
мне нужен не повернутый прямоугольник, а прямоугольник вокруг повернутого мувика.

MrPoma
13.01.2008, 18:10
вас не понятно

Idalgo
01.02.2008, 16:10
Пример здесь:
http://www.rivne-today.com/test/test_circles.html
два одинаковых мувика-круга, один повернут на 45 градусов

кодом рисуется прямоугольник(в данном случае квадрат) :

var p = mc.getBounds(mc._parent)
lineStyle(0,0,100)
moveTo(p.xMin,p.yMin)
lineTo(p.xMax,p.yMin)
lineTo(p.xMax,p.yMax)
lineTo(p.xMin,p.yMax)
lineTo(p.xMin,p.yMin)


В этом примере getBounds дает границы повернутого прямоугольника, описывающего мувик, что мне не подходит.
Как можно по-другому?
Исходник: http://www.rivne-today.com/test/test_circles.fla

MrPoma
01.02.2008, 16:43
public function calcVertex(o:BasicObject):Array{
var w_2:Number = o.dim_w/2;//полуширина
var h_2:Number = o.dim_h/2;//полувысота

var r:Number = Math.sqrt(w_2*w_2 + h_2*h_2);//полудиаметр
var dir:Number = Math.acos(w_2/r)*(180/Math.PI);//угол

var p:Array = new Array();//вершины обекта

p[0] = new Vector();
p[0].x = o.x+Math.cos((o.rotation-dir)*(Math.PI/180))*r;
p[0].y = o.y+Math.sin((o.rotation-dir)*(Math.PI/180))*r;

p[1] = new Vector();
p[1].x = o.x+Math.cos((o.rotation-(180-dir*2)-dir)*(Math.PI/180))*r;
p[1].y = o.y+Math.sin((o.rotation-(180-dir*2)-dir)*(Math.PI/180))*r;

p[2] = new Vector();
p[2].x = o.x+Math.cos((o.rotation-(180+dir*2)+dir)*(Math.PI/180))*r;
p[2].y = o.y+Math.sin((o.rotation-(180+dir*2)+dir)*(Math.PI/180))*r;

p[3] = new Vector();
p[3].x = o.x+Math.cos((o.rotation+dir)*(Math.PI/180))*r;
p[3].y = o.y+Math.sin((o.rotation+dir)*(Math.PI/180))*r;

return p;
}
код писал давно

Idalgo
01.02.2008, 17:42
Что-то не то получается.
Мне нужно описать (неповернутый) прямоугольник вокруг любого мувика, в т.ч. трансформированного матрицей искажений.

Molecula
01.02.2008, 18:59
Что-то не мойму, а почему нельзя использовать св-ва _width и _height?
Если Вы повернете мувик - Вы получите уже другие значение, это будут высота и ширина тогоСАМОГО прямоугольника, который Вам нужен.

trace(mc1._width)
mc1._rotation+=20;
trace(mc1._width)

Idalgo
01.02.2008, 19:13
Что-то не мойму, а почему нельзя использовать св-ва _width и _height?
Практика показала, что это совершенно не годится :)