AS3 Центр масштабирования перетаскиваемого контейнера с маской - PullRequest
0 голосов
/ 02 августа 2010

Привет, у меня есть контейнер мувиклип и один слой маски с высотой и шириной текущего экрана.Континент всегда больше, чем зажим для маски.поэтому мне нужно увеличить контейнер в центре клипа маски.something link in MicroSoft XL zoom controller at the bottom right.

Есть ли когда-нибудь уравнение или какие-либо другие демонстрационные ссылки?Спасибо заранее !!!

РЕДАКТИРОВАТЬ 1

private function slider (event:Event) {
    //event.target.value = 0 to 1  
    // possible values are 0, 0.1, 0.2, 0.3, ... 0.9, 1
    // mcMask.x =  mcMask.x = 0;
    // mcMask.width = stage.StageWidth, mcMask.height = stage.StageHeight
    // mcContainer.x and mcContainer.y may vary .. its greater than the mcMask clip. 
    // So its need to be drag on the mask clip. I have placed a lots of images in the container something like map. 
    // If the slider changes the values then the map(mcContainer) need to zoom to scale came from 'event.target.value'.

    // i want to zoom the mcContainer inside the mask, not the mouse cliked point, I want the current center 
    // posistion of the container with resepect to the  mask clip.

    mcContainer.scaleX = mcContainer.scaleY = (event.target.value);
    mcContainer.x = (mcMask.width - mcContainer.width)/2;
    mcContainer.y = (mcMask.height - mcContainer.height)/2;

    // I tried this but if i drag this mcContainer to the left or right it should not locate the center point.
}

есть надежда ???: (

РЕДАКТИРОВАТЬ 2

Исходный код: http://www.4shared.com/file/08X5mG99/AS3_Zooming.html

Ответы [ 2 ]

1 голос
/ 03 августа 2010

Хорошо, тогда, когда вы масштабируете вокруг точки, вы должны знать, где находится точка относительно, а затем масштабировать ее с тем же масштабом, что и клип, который вы изменяете.поэтому что-то вроде этого должно работать (обратите внимание, это не проверено, но попробуйте немного подправить):

- EDIT -

private function zoomContainer (event:Event):void {
        var relativeZoom:Number = event.target.value / mcContainer.scaleX;

        var origin:Point = new Point(stage.stageWidth/ 2, stage.stageHeight / 2);
        var centerPoint:Point = mcContainer.globalToLocal(origin);
        centerPoint.x *= relativeZoom;
        centerPoint.y *= relativeZoom;
        var newCenterPoint:Point = mcContainer.localToGlobal(centerPoint);
        var offset:Point = origin.subtract(newCenterPoint);

        mcContainer.x += offset.x;
        mcContainer.y += offset.y;
        mcContainer.scaleX *= relativeZoom; 
        mcContainer.scaleY *= relativeZoom;
    }
0 голосов
/ 02 августа 2010

при условии, что оба клипа имеют точки регистрации в левом верхнем углу, тогда вы можете использовать

mcContainer.x = (mcMask.width - mcContainer.width)/2;
mcContainer.y = (mcMask.height - mcContainer.height)/2;

Это отцентрирует клип контейнера, если вы хотите масштабировать клип контейнера, а вам нужно это

mcContainer.scaleX = mcContainer.scaleY = Math.min(mcMask.width/mcContainer.width, mcMask.height/mcContainer.height);

Если изменить Math.min на Math.max, стиль «увеличения» изменится с показа всех на заполнение области маски.Если вы масштабируете, а также позиционируете, вам нужно будет сделать масштабирование до позиционирования.

...