Вспышка as3 увеличение (увеличение) до определенной точки в клипе - PullRequest
1 голос
/ 24 мая 2011

Я пытаюсь увеличить контейнерный / родительский фрагмент ролика, чтобы эффективно увеличить масштаб до точки, на которую ссылается один из его дочерних элементов. Я выяснил, как использовать globalToLocal, чтобы получить эту точку в центре сцены, но проблема в том, что точка регистрации для клипа контейнера находится (и должна оставаться) в верхнем левом углу, поэтому, когда я масштабирую клип контейнера вверх, точка не остается в центре экрана. Вот мой код:

// редакция:

var stageCenter = new Point(int(stage.stageWidth/2),int(stage.stageHeight)/2);
    var parPointLocal = parRef.globalToLocal(stageCenter);
    TweenMax.to(treeClip,.5,{x:parPointLocal.x,y:parPointLocal.y,onComplete:doZoom});

    function doZoom():void {
        var zoomPoint = zoomToMember(treeClip,stageCenter,2);

        function zoomToMember(target:MovieClip, center:Point, scale:Number):Point {
            var m:Matrix = new Matrix();
            m.translate(-center.x, -center.y);//move the center into (0,0)
            m.scale(scale, scale);//scale relatively to (0,0) (which is where our center is now)
            m.translate(center.x, center.y);//move the center back to its original position
            return m.transformPoint(new Point());//transform (0,0) using the whole transformation matrix to calculate the destination of the upper left corner
        }

        TweenMax.to (treeClip,.5,{x:zoomPoint.x,y:zoomPoint.y,scaleX:2,scaleY:2})

    }

Когда я делаю это, увеличенная точка оказывается где-то рядом с «Магазином игрушек Мэйбл Грир», который, как мне кажется, был центральной точкой сцены до того, как скрепка для дерева была скручена так, чтобы «Джон Андерсон» находился в центре сцена.

screenshot

1 Ответ

3 голосов
/ 24 мая 2011

Вам необходимо вычислить конечную позицию левого верхнего угла после масштабирования и добавить к нему свойства x и y.

Самый простой способ - использовать матрицы:

function scale(target:MovieClip, center:Point, scale:Number):Point {
    var m:Matrix = new Matrix();
    m.translate(-center.x, -center.y);//move the center into (0,0)
    m.scale(scale, scale);//scale relatively to (0,0) (which is where our center is now)
    m.translate(center.x, center.y);//move the center back to its original position
    return m.transformPoint(new Point());//transform (0,0) using the whole transformation matrix to calculate the destination of the upper left corner
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...