旋转中心内容

时间:2009-11-23 03:45:08

标签: flex flash actionscript-3

好的,所以我一直试图让这个概念现在正常运作,并且没有运气。我对数学不太满意,所以任何帮助都会受到赞赏。我试图从它的中心旋转一个居中的容器。这段代码的问题是当我使用rotatePicture方法时,它不会从中心旋转,而是从盒子的左上角旋转。这是代码......

    import mx.effects.Rotate;

    private function init():void
    {
        calculateCoordinates();
    }

    private function rotateBox():void
    {
        var m:Matrix            = myBox.transform.matrix;
        var centerX:Number        = myBox.width / 2;
        var centerY:Number        = myBox.height / 2;

        var centerPoint:Point    = new Point(centerX, centerY);
        var transformPoint:Point= m.transformPoint(centerPoint);


        m.translate(-transformPoint.x, -transformPoint.y);
        m.rotate(90 * Math.PI / 180);

        m.translate(transformPoint.x, transformPoint.y);

        myBox.transform.matrix = m;         

        this.callLater(calculateCoordinates);
        //calculateCoordinates();

    }

    private function calculateCoordinates():void
    {
        var x : Number = (myBox.parent.width - myBox.width) / 2;
        x = x < 0 ? 0 : x;
        var y : Number = (myBox.parent.height - myBox.height) / 2;
        y = y < 0 ? 0 : y;
        myBox.move(x, y);
    }

4 个答案:

答案 0 :(得分:1)

好的,这有点棘手,我正在制定一些细节,但如果有人有类似的问题,我找到了一般答案。刚刚拍完电影让大脑恢复活力......

我必须为画布旋转了多少转而放置一个变量,这很容易,因为我将度数限制为仅90.然后我放置一个switch语句,测试turn变量并重新计算(x,y)基于转弯的坐标。因为我知道Rotate类会产生更酷的效果并以相同的结果结束,所以我最终使用了它。

干杯!

答案 1 :(得分:1)

就个人而言,我将容器包装在另一个精灵中,将其定位,使其中心位于(0,0)精灵坐标空间中,然后旋转精灵...它简单而强大...... < / p>

答案 2 :(得分:1)

我不知道你的背景是什么,但根据我的经验,这是一个“超越自我”的经典案例。

你已经写了很多代码来做一些Flash显示API的原生代码。

由于您似乎正在使用Flex,我只是告诉您,实现此目的的简单方法是动态重新定位显示剪辑内容,以使内容的中心位于剪辑的0,0点。 / p>

你拥有的内容越多越难,但是如果你只有像图像或按钮或者你有什么东西,那么只计算高度和宽度,然后除以2并减去。

然后旋转属性就可以了。

在Flash中它更容易,因为您可以创建一个新剪辑,将您的类绑定到剪辑,并将您的所有内容放在Flash创作工具中,以便轮换以正常工作。

是的,Back2Dos说的是什么。

答案 3 :(得分:0)

我想使用&lt; s:Rotate&gt;旋转中心。希望对你有用。