AS3: масштабирование спрайта с матрицей при смене слайдера? - PullRequest
0 голосов
/ 21 июля 2011

У меня есть спрайт, который содержит растровые данные. Я хочу дать пользователю возможность изменить размер изображения с помощью ползунка. Я использую код ниже, как вы можете видеть, проблема в том, что масштабирование является аддитивным, поэтому очень быстро изображение полностью исчезает.

Я понимаю, что мне нужно масштабировать его неаддитивным способом, просто не могу понять, как?

Я пытался передать:

var m:Matrix = userImageCopy.transform.matrix;

когда userImageCopy содержит исходное изображение. это помогло для масштабирования, но затем, каждый раз, когда начиналось масштабирование, userImage переходил на позицию userImageCopy.

Любая помощь?

function onSliderChange(evt:Event):void
    {
        trace( evt.target.value);
        //this will create a point object at the center of the display object

        var ptRotationPoint:Point = new Point(userImage.x + userImage.width / 2,userImage.y + userImage.height / 2);
        //call the function and pass in the object to be rotated, the amount to scale X and Y (sx, sy), and the point object we created
        scaleFromCenter(userImage, evt.target.value, evt.target.value, ptRotationPoint);
    }

    private function scaleFromCenter(ob:*, sx:Number, sy:Number, ptScalePoint:Point)
    {
        var m:Matrix = userImage.transform.matrix;
        m.tx -=  ptScalePoint.x;
        m.ty -=  ptScalePoint.y;
        m.scale(sx, sy);
        m.tx += ptScalePoint.x;
        m.ty += ptScalePoint.y;
        ob.transform.matrix = m;
    }

1 Ответ

0 голосов
/ 21 июля 2011

Вместо того, чтобы комбинировать значения вашего центра с текущими значениями tx и ty, просто установите их напрямую с помощью метода Matrix.translate:

private function scaleFromCenter(ob:*, sx:Number, sy:Number, ptScalePoint:Point)
{
    var m:Matrix = new Matrix();
    m.translate(-ptScalePoint.x,-ptScalePoint.y);
    m.scale(sx, sy);
    m.translate(ptScalePoint.x,ptScalePoint.y);
    ob.transform.matrix = m;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...