2011-07-21 4 views
0

J'ai un sprite qui contient des données bitmap. Je souhaite donner à l'utilisateur la possibilité de redimensionner l'image avec un curseur. J'utilise le code ci-dessous, comme vous pouvez le voir, le problème est que la mise à l'échelle est additive, donc très rapidement, l'image disparaît totalement. Je comprends que je dois l'échelle de manière non additive, ne peut pas comprendre comment?AS3: Scaling Sprite avec matrice sur changement de curseur?

J'ai essayé de passer:

var m:Matrix = userImageCopy.transform.matrix; 

lorsque userImageCopy détient l'image originale. cela a aidé à la mise à l'échelle, mais chaque fois que la mise à l'échelle a commencé, userImage a sauté à la position de l'imageImageCopy.

Une aide?

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

Répondre

0

plutôt que de combiner vos valeurs centrales avec le tx et ty actuelle, il suffit de les régler directement avec la méthode 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; 
}