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

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

Цитата:

Сообщение от Molecula
Что-то не мойму, а почему нельзя использовать св-ва _width и _height?

Практика показала, что это совершенно не годится :)


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

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