2011-05-24 3 views
1

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

// Ревизии:

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}) 

    } 

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

screenshot

ответ

3

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

Самый простой способ заключается в использовании матрицы:

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 
} 
+0

Спасибо - я сортирую получить его (извините), но когда я его реализации, это не совсем, кажется, масштабирование в нужное место. Я изменил свое описание выше, чтобы показать пересмотренный код. Любая помощь, которую вы могли бы предоставить, была бы замечательной. – mheavers

+0

О - также - почему вы включили фрагмент ролика в качестве параметра функции, если мувиклип (цель) не используется? Должно быть? – mheavers

+0

Да, включая цель, на самом деле не используется :). Однако, если центральная точка фактически выражена в глобальном пространстве координат, вам нужно сделать 'center = target.globalToLocal (center);', что делает цель необходимой снова. – back2dos

Смежные вопросы